我有两个类的以下设置:
[SerializableAttribute]
public class ParentData{
[DataMember]
public string Title{get;set;}
}
[DataContract]
public class ChildData : ParentData{
[DataMember]
public string Abstract{get;set;}
}
这两个类通过WCF服务提供。但是,我只希望服务将ChildData类公开给最终用户,而是从父级中提取标记的DataMember属性。例如。使用客户端的存根类看起来像:
public class ChildData{
public string Title{get;set;}
public string Abstract{get;set;}
}
如果我使用上面的父类和子类,则存根类只包含Abstract属性。
我已经看过在ChildData类上使用KnownType属性,如下所示:
[DataContract]
[KnownType(typeOf(ParentData)]
public class ChildData : ParentData{
[DataMember]
public string Abstract{get;set;}
}
然而这不起作用。
然后我将DataContract属性应用于ParentData类,但是这会在客户端应用程序中创建两个我不想要的存根类。
有没有办法告诉序列化程序它应该将继承扁平化为子类的继承,即ChildData
答案 0 :(得分:1)
我相信您的ParentData
课程还需要 [DataContract]
属性:
[DataContract]
public class ParentData
{
[DataMember]
public string Title{get;set;}
}
[Serializable]
对使用默认数据协定序列化程序的WCF没有帮助。
答案 1 :(得分:0)
我相信您的ParentData类应该标记为abstract,并且还需要具有[DataContract]属性:
[DataContract]
public abstract class ParentData
{
[DataMember]
public string Title{get;set;}
}
正如marc所说,[Serializable]对使用默认数据协定序列化程序的WCF没有任何帮助。