如何使用DataContract继承?代码如下工作?
[DataContract]
public class ConsoleData
{
[DataMember]
public String Description { get; set; }
}
[DataContract]
public class SomeData : ConsoleData
{
[DataMember]
public int Volume { get; set; }
......
Run Code Online (Sandbox Code Playgroud)
And*_*erd 45
是的,那会有用.
在DataContractAttribute已Inherited设置为false,所以需要将属性应用到子类和父类两种(如你的问题做了).
KnownType如果要使用具有多态性的数据协定,则
需要使用该属性.
例如
[ServiceContract]
interface MyWcfContract
{
[OperationContract]
HandleData(ConsoleData contractData);
}
Run Code Online (Sandbox Code Playgroud)
如果您调用这样的方法:
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);
Run Code Online (Sandbox Code Playgroud)
然后服务端的反序列化器将不知道它是一个实例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; }
......
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19884 次 |
| 最近记录: |