序列化为 JSON 隐藏基 class 成员的 class
Serialize to JSON a class that hides member of base class
有两个class:
class Document {
public DocumentItem[] DocumentItemList { get; set; }
}
class DocumentViewModel : Document{
public new DocumentItemViewModel[] DocumentItemList { get; set; }
}
派生 class 中的 DocumentItemList
隐藏基础 class 中的 DocumentItemList
。
当DocumentViewModel
对象序列化为JSON时:
DocumentViewModel instance = CreateObject(); // object gets created
string serializedContent = new JavaScriptSerializer().Serialize(instance);
序列化字符串中有两个 DocumentItemList:
{
"DocumentItemList": [{
... etc. ...
}],
"DocumentItemList": null
}
为什么会这样?当数据被反序列化时,这会导致错误。
(顺便说一句,我用 Newtonsoft.JSON 测试了序列化,那个序列化器没有这个错误)。
如果你想坚持使用 JavaScriptSerializer
,你可以考虑使用 [JsonIgnore]
属性,在 属性 上你想被忽略,这是关于阴影属性的讨论在线程中 here.
给你:
class Document {
public DocumentItem[] DocumentItemList { get; set; }
}
class DocumentViewModel : Document{
[JsonIgnore]
public new DocumentItemViewModel[] DocumentItemList { get; set; }
}
有两个class:
class Document {
public DocumentItem[] DocumentItemList { get; set; }
}
class DocumentViewModel : Document{
public new DocumentItemViewModel[] DocumentItemList { get; set; }
}
派生 class 中的 DocumentItemList
隐藏基础 class 中的 DocumentItemList
。
当DocumentViewModel
对象序列化为JSON时:
DocumentViewModel instance = CreateObject(); // object gets created
string serializedContent = new JavaScriptSerializer().Serialize(instance);
序列化字符串中有两个 DocumentItemList:
{
"DocumentItemList": [{
... etc. ...
}],
"DocumentItemList": null
}
为什么会这样?当数据被反序列化时,这会导致错误。
(顺便说一句,我用 Newtonsoft.JSON 测试了序列化,那个序列化器没有这个错误)。
如果你想坚持使用 JavaScriptSerializer
,你可以考虑使用 [JsonIgnore]
属性,在 属性 上你想被忽略,这是关于阴影属性的讨论在线程中 here.
给你:
class Document {
public DocumentItem[] DocumentItemList { get; set; }
}
class DocumentViewModel : Document{
[JsonIgnore]
public new DocumentItemViewModel[] DocumentItemList { get; set; }
}