У меня есть два класса, где конкретный класс 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 theJsonPropertyAttribute
to specify another name.
Я понимаю, почему я получаю эту ошибку, однако, я не хочу, чтобы изменить свойство имя на конкретном классе; Я хочу сказать сериализатору игнорировать свойство базового класса.
Я попытался использовать соглашение ShouldSerialize{PropertyName}()
, которое поддерживает XmlSerializer
, и Json.NET claims to support too, однако, похоже, это не работает для моего сценария.
Является ли 'Model' единственным типом, который когда-либо будет сериализован или возможно, что вы захотите также сериализовать объект 'Model'? –
@ M.Babcock Я должен был уточнить: «Модель» может быть также сериализована ... иначе было бы просто отметить «Model.Items» с помощью '[JsonIgnore]' –
Можете ли вы сделать «Элементы» в базе class virtual и использовать 'override' вместо того, чтобы скрываться с' new'? Я знаю, что это не то, о чем вы просите, но если у вас есть контроль над обоими типами; почему бы не сделать это «правильным» способом? –