序列化为 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; }
}