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
Тестовий код:
|