【问题标题】:Serializing POCO class derived from baseclass with DataContract?使用DataContract序列化从基类派生的POCO类?
【发布时间】:2013-10-07 17:49:04
【问题描述】:

我注意到,当使用从使用显式 DataContract 属性的基类派生的 JSON.NET 序列化/反序列化 POCO 类时,派生类上的任何 POCO 属性都会被忽略。

例如,在这个例子中,“地址”没有被序列化/反序列化:

[DataContract]
public class MyBaseClass
{
    [DataMember(Name = "SomeName")]
    public string Name { get; set; }
}

public class MyDerivedClass : MyBaseClass
{
    public string Address { get; set; }
}

这是故意的吗?

FWIW,似乎 DataContractSerializer(至少是 XML 的)在这里做了“正确的事情”并序列化/反序列化“地址”。

谢谢!

亨里克

【问题讨论】:

  • 在我的测试中,如果DataContractSerializer没有用[DataContract]装饰,它根本不会序列化子类;相反,它会引发异常。这似乎与documentation for the DataContractAttribute 一致,它声明它不是从基类继承的。
  • @BrianRogers 您的意思是基类需要该属性吗?无论如何,已经有一段时间了,所以也许它改变了。请参阅this documentation 了解继承如何影响数据契约。

标签: json.net


【解决方案1】:

在 JSON.NET 中,至少从 v4.5.6 开始,它会检测基类的 DataContractassumes opt-in serialization。由于Address 没有使用DataMember 属性进行修饰,因此它不会被序列化。

这是 James Newton-King 的设计,没有计划更改。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多