0

DataContract私は定義されたWCFとそれDataContractを拡張する他のいくつかを持っています。したがって、原始的な形式では次のようになります。

    [DataContract(Name = "FacilityPerson"]
    [KnownType(typeof(Student))]
    [KnownType(typeof(Teacher))]
    public class Person
    {
        [DataMember(IsRequired=true)]
        public string FirstName { get; set; }
        [DataMember]
        public string LastName { get; set; }
        [DataMember]
        public DateTime? DOB { get; set; }   

    }

    [DataContract]
    public class Student
    {
        [DataMember(IsRequired=true)]
        public int StudentID { get; set; }

    }

[DataContract]
public class Teacher
{
    [DataMember(IsRequired=true)]
    public int StaffID { get; set; }

}

操作が 1 つしかなく、次のようなServieContractがあります。

[OperationContract(Name = "ReportNewPerson")]
void ReportNewTeacherOrStudent(Person person);

私の問題は、実装時に親オブジェクトの子プロパティにアクセスできないことです。

public class UniversityService : IUniversityServiceContract  
{

        void ReportNewTeacherOrStudent(Person person)
        {
             if(person.GetType().FullName == "Student")
             {
                     //here I have a parent object so I cannot getStudentId which is a child property           
                     Console.Writeline(person.StudentId);

             }

        }
}

ここで何をすべきですか?

4

2 に答える 2

3

名前からタイプを比較しないでください。代わりに、キャストまたはas演算子を使用してそれを行います。

public class UniversityService : IUniversityServiceContract  
{
    public void ReportNewTeacherOrStudent(Person person)
    {
        Student student = person as Student;
        if (student != null)
        {
            Console.Writeline(student.StudentId);
        }
    }
}
于 2012-08-30T23:18:09.367 に答える
1

カルロスフィゲイラの答えを確認してください。彼は正しい。

TeacherクラスとStudentクラスの継承も追加する必要があります。

[DataContract]
public class Student: Person
{
    ...
}

[DataContract]
public class Teacher: Person
{
   ...    
}

更新: はい、親と子の両方で属性を指定する必要があります。

于 2012-08-31T01:46:13.953 に答える