|
|
Публикувано в 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, в проектната практика
|