Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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, в проектната практика
Публикувано в 1.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