繁体   English   中英

DataContract和继承?

[英]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; }
    ......

是的,那会有用。

DataContractAttributeInherited设置为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM