Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 33737|Відповідь: 2

[Джерело] Newtonsoft.Json ігнорує функцію DataContract

[Копіювати посилання]
Опубліковано 30.05.2018 16:50:17 | | | |
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


Тестовий код:







Попередній:Моніторинг AppDomains
Наступний:. Найшвидший компонент відображення об'єктів OOM у .NET — Tiny Mapper — у практиці проєктів
Опубліковано 01.06.2018 13:20:10 |
Визначте, чи є json-рядок об'єктом або масивом
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

перемикач (s.Type.ToString())
                {
                    Випадок «Об'єкт»:
                        перерва;
                    Випадок «Масив»:
                        перерва;
                    За замовчуванням:
                        перерва;
                }
Опубліковано 21.08.2020 11:52:32 |
Підтримайте, орендодавець майстер у тому, щоб просити стегна
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com