Сериализация в JSON класс, который скрывает член базового класса

Есть два класса:

class Document {
    public DocumentItem[] DocumentItemList { get; set; }
}

class DocumentViewModel : Document{
    public new DocumentItemViewModel[] DocumentItemList { get; set; }
}

DocumentItemList в производном классе прячется DocumentItemList в базовом классе.

когда DocumentViewModel Объект сериализуется в JSON:

DocumentViewModel instance = CreateObject(); // object gets created
string serializedContent = new JavaScriptSerializer().Serialize(instance);

в сериализованной строке есть два DocumentItemList:

{
    "DocumentItemList": [{
            ... etc. ...
    }],
    "DocumentItemList": null
}

Почему это так? Это вызывает ошибку, когда данные десериализуются.

(Кстати, я тестировал сериализацию с Newtonsoft.JSON, и этот сериализатор не имеет этой ошибки).

1 ответ

Решение

Если вы хотите придерживаться JavaScriptSerializer вы можете рассмотреть возможность использования [JsonIgnore] Атрибут для свойства, которое вы хотите игнорировать, здесь обсуждаются свойства теней в потоке.

Ну вот:

class Document {
    public DocumentItem[] DocumentItemList { get; set; }
}

class DocumentViewModel : Document{
    [JsonIgnore]
    public new DocumentItemViewModel[] DocumentItemList { get; set; }
}
Другие вопросы по тегам