【问题标题】:Trying to hide base class member during serialization with Json.NET尝试在使用 Json.NET 进行序列化期间隐藏基类成员
【发布时间】:2012-03-07 10:14:57
【问题描述】:

我有两个类,具体类 Model<T> 隐藏了基类的 Items 属性。

class Model
{
    List<ListItem> Items {get;set;}
}

class Model<T> : Model
{
    new List<ListItem<T>> Items {get;set;}
}

使用 Json.NET 序列化 Model&lt;T&gt; 的实例时出现错误:

Newtonsoft.Json.JsonSerializationException:“Model&lt;T&gt;”上已存在名为“Items”的成员。使用JsonPropertyAttribute 指定另一个名称。

我理解为什么会收到此错误,但是我不想更改具体类的属性名称;我希望能够告诉序列化程序忽略基类属性。

我尝试使用XmlSerializer 支持的ShouldSerialize{PropertyName}() 约定和Json.NET claims to support too,但这似乎不适用于我的场景。

【问题讨论】:

  • Model&lt;T&gt; 是唯一会被序列化的类型,还是您也可能想要序列化 ​​Model 对象?
  • @M.Babcock 我应该澄清一下,Model 也可以被序列化......否则用[JsonIgnore] 标记Model.Items 会很简单
  • 您能否将基类中的Items 设为虚拟并使用override 而不是使用new 隐藏?我知道这并不是您真正想要的,但是如果您可以控制这两种类型;为什么不以“正确”的方式去做呢?
  • @M.Babcock 类型不同,因此无法覆盖
  • 很公平(我忽略了这一点)。 ListItemListItem&lt;T&gt; 是否有可能继承一个公共接口或共享一个公共基础?

标签: c# asp.net serialization json.net


【解决方案1】:

感谢rsbarro 指出这已在更高版本的 Json.NET (v4.0.6.0) 中得到修复。我已经升级并确认现在序列化了正确的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    相关资源
    最近更新 更多