[英]DataContract and inheritance?
如何使用DataContract继承? 代码如下工作?
[DataContract]
public class ConsoleData
{
[DataMember]
public String Description { get; set; }
}
[DataContract]
public class SomeData : ConsoleData
{
[DataMember]
public int Volume { get; set; }
......
是的,那会有用。
DataContractAttribute
将Inherited
设置为false,因此必须将该属性应用于子类和父类(正如您在问题中所做的那样)。
KnownType
属性。
例如
[ServiceContract] interface MyWcfContract { [OperationContract] HandleData(ConsoleData contractData); }
如果您调用这样的方法:
SomeData someData = new SomeData { Description = "Test", Volume = 30 }; // The method is expecting a ConsoleData instance, // I'm passing a SomeData instance instead myWcfProxy.HandleData(someData);
然后服务端的反序列化器不会知道它是SomeData
的一个实例,只是它期望的ConsoleData
实例。 解决此问题的方法是将SomeData
类注册为已知类型的ConsoleData
。
[DataContract] [KnownType(typeof(SomeData))] public class ConsoleData { [DataMember] public String Description { get; set; } } [DataContract] public class SomeData : ConsoleData { [DataMember] public int Volume { get; set; } ......
如果您正在为ServiceContract使用XmlSerializerFormat,则需要使用KnownType属性:
[DataContract]
public class ConsoleData
{
[DataMember]
public String Description { get; set; }
}
[DataContract, KnownType(typeof(ConsoleData))]
public class SomeData : ConsoleData
{
[DataMember]
public int Volume { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.