2012-02-16 2 views
1

У меня есть два класса, где конкретный класс Model<T> скрывает базовый класс 'Items.Попытка скрыть элемент базового класса при сериализации с помощью Json.NET

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

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

При сериализации экземпляра Model<T> с Json.NET я получаю ошибку:

Newtonsoft.Json.JsonSerializationException : A member with the name ' Items ' already exists on ' Model<T> '. Use the JsonPropertyAttribute to specify another name.

Я понимаю, почему я получаю эту ошибку, однако, я не хочу, чтобы изменить свойство имя на конкретном классе; Я хочу сказать сериализатору игнорировать свойство базового класса.

Я попытался использовать соглашение ShouldSerialize{PropertyName}(), которое поддерживает XmlSerializer, и Json.NET claims to support too, однако, похоже, это не работает для моего сценария.

+0

Является ли 'Model ' единственным типом, который когда-либо будет сериализован или возможно, что вы захотите также сериализовать объект 'Model'? –

+0

@ M.Babcock Я должен был уточнить: «Модель» может быть также сериализована ... иначе было бы просто отметить «Model.Items» с помощью '[JsonIgnore]' –

+0

Можете ли вы сделать «Элементы» в базе class virtual и использовать 'override' вместо того, чтобы скрываться с' new'? Я знаю, что это не то, о чем вы просите, но если у вас есть контроль над обоими типами; почему бы не сделать это «правильным» способом? –

ответ

0

Благодаря rsbarro за то, что это было исправлено в более поздней версии Json.NET (v4.0.6.0). Я обновил и подтвердил, что правильное свойство теперь сериализовано.

Смежные вопросы