Newtonsoft.JsonКак вы, вероятно, знаете, часто используемые инструменты сериализации и десериализации JSON
DataContractAttributeЗадаёт этот тип для определения или реализации контракта данных, который может быть сериализован сериализатором, таким как DataContractSerializer. Чтобы сделать тип сериализируемым, автор типа должен определить контракт данных для его типа.
столкнулся с сложной проблемой,Родительский класс имеет функцию [DataContract], а дочерний класс наследует родительский класс, и все атрибуты подкласса должны быть сериализованы и десериализованы с атрибутом [DataMember]Поскольку родительский класс — это инкапсулированный dll другого человека, функцию [DataContract] родительского класса удалить нельзя!
Тест выглядит следующим образом: класс Test1 имеет функцию [DataContract], если атрибут не добавляет особенность [DataMember], это приведёт к сбоям сериализации и десериализации, как показано на рисунке ниже:
Мы аннотировали особенность [DataContract] класса Test1 и обнаружили, что её можно нормально сериализировать и десериализировать, следующим образом:
Существует ли какое-то продвинутое применение Newtonsoft.Json, которое может игнорировать эту функцию? Ответ — да!
Просто используйте свойство OptOut на Json.Net. Он будет иметь приоритет над DataContract.
// Аннотация: Все публичные участники по умолчанию сериализированы. Участников можно исключить с помощью Newtonsoft.Json.JsonIgnoreAttribute или System.NonSerializedAttribute. Это шаблон сериализации по умолчанию. OptOut = 0, // Аннотация: Только участники, помеченные как Newtonsoft.Json.JsonPropertyAttribute или System.Runtime.Serialization.DataMemberAttribute сериализуется. Этот режим сериализации элементов также можно задать с помощью тегирования класс с System.Runtime.Serialization.DataContractAttribute. OptIn = 1, // Аннотация: Все публичные и частные сферы являются сериализированными. Участников можно исключить с помощью Newtonsoft.Json.JsonIgnoreAttribute или System.NonSerializedAttribute. Этот паттерн сериализации элементов тоже работает нормально Установите это, пометив класс System.SerializableAttribute и установив IgnoreSerializableAttribute Установите Newtonsoft.Json.Serialization.DefaultContractResolver в false. Поля = 2
Тестовый код:
|