gpt4 book ai didi

c# - DataContract 和继承?

转载 作者:IT王子 更新时间:2023-10-29 04:12:44 26 4
gpt4 key购买 nike

如何使用继承的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; }
......

关于c# - DataContract 和继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8555089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com