Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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


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







Предыдущий:Monitor 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