DataContract继承不是已知类型

时间:2012-09-11 11:57:44

标签: c# wcf datacontract

我的datacontract有继承,但在使用服务时无法访问最后一个成员:

namespace Services.SearchService
{

    [DataContract]
    [KnownType(typeof(LabellingSearch))]
    public class SearchResult
    {
        [DataMember]
        public int ID { get; set; }

        [DataMember]
        public string Title { get; set; }

        [DataMember]
        public DateTime Modified { get; set; }
    }

    /// <summary>
    /// Specialist Search Result for Labelling Content Data
    /// </summary>
    [DataContract]
    [KnownType(typeof(Labelling))]
    public class LabellingSearch : SearchResult
    {
        [DataMember]
        public string Region { get; set; }

        [DataMember]
        public string Country { get; set; }

        [DataMember]
        public string LabelSummary { get; set; }
    }

    /// <summary>
    /// Full Labelling Content Data
    /// </summary>
    [DataContract]
    public class Labelling : LabellingSearch
    {
        public string Content { get; set; }
   }
}

所以在消费类中,我可以访问“标签”类型,但我无法获取其“内容”属性。

2 个答案:

答案 0 :(得分:2)

您没有将该成员列为 [DataMember]

[DataContract]
    public class Labelling : LabellingSearch
    {
        [DataMember]
        public string Content { get; set; }
   }

答案 1 :(得分:1)

您无法访问Content属性,因为它不是DataMember所以它没有被序列化。添加[DataMember]属性

[DataMember]
public string Content { get; set; }

在MSDN上关于 DataMemberAttribute类

  

当应用于类型的成员时,指定该成员是数据协定的一部分,并且可由DataContractSerializer序列化。