【发布时间】: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<T> 的实例时出现错误:
Newtonsoft.Json.JsonSerializationException:“Model<T>”上已存在名为“Items”的成员。使用JsonPropertyAttribute指定另一个名称。
我理解为什么会收到此错误,但是我不想更改具体类的属性名称;我希望能够告诉序列化程序忽略基类属性。
我尝试使用XmlSerializer 支持的ShouldSerialize{PropertyName}() 约定和Json.NET claims to support too,但这似乎不适用于我的场景。
【问题讨论】:
-
Model<T>是唯一会被序列化的类型,还是您也可能想要序列化 Model对象? -
@M.Babcock 我应该澄清一下,
Model也可以被序列化......否则用[JsonIgnore]标记Model.Items会很简单 -
您能否将基类中的
Items设为虚拟并使用override而不是使用new隐藏?我知道这并不是您真正想要的,但是如果您可以控制这两种类型;为什么不以“正确”的方式去做呢? -
@M.Babcock 类型不同,因此无法覆盖
-
很公平(我忽略了这一点)。
ListItem和ListItem<T>是否有可能继承一个公共接口或共享一个公共基础?
标签: c# asp.net serialization json.net