|
|
Zverejnené 30. 5. 2018 16:50:17
|
|
|
|

Newtonsoft.JsonAko pravdepodobne viete, bežne používané nástroje na serializáciu a deserializáciu v JSON
DataContractAttributeŠpecifikuje tento typ na definovanie alebo implementáciu dátovej zmluvy, ktorú môže serializovať serializátor, napríklad DataContractSerializer. Aby bol typ serializovateľný, musí autor typu definovať dátovú zmluvu pre jeho typ.
narazil na ťažký problém,Rodičovská trieda má funkciu [DataContract] a podtrieda dedí triedu rodiča, pričom všetky atribúty tejto podtriedy musia byť serializované a deserializované pomocou atribútu [DataMember]Keďže nadriadená trieda je zapuzdrený dll niekoho iného, funkcia [DataContract] nadradenej triedy nemôže byť vymazaná!
Test je nasledovný: Trieda Test1 má funkciu [DataContract], ak atribút nepridá funkciu [DataMember], spôsobí to zlyhanie serializácie a deserializácie, ako je znázornené na obrázku nižšie:
Anotovali sme vlastnosť [DataContract] triedy Test1 a zistili sme, že ju možno serializovať a deserializovať normálne, nasledovne:
Existuje nejaké pokročilé využitie Newtonsoft.Json, ktoré by túto funkciu ignorovalo? Odpoveď je áno!
Stačí použiť vlastnosť OptOut v Json.Net. Bude mať prednosť pred DataContract.
// Abstrakt: Všetci verejní členovia sú štandardne serializovaní. Členovia môžu byť vylúčení pomocou Newtonsoft.Json.JsonIgnoreAttribute alebo System.NonSerializedAttribute. Toto je predvolený vzor serializácie členov. OptOut = 0, // Abstrakt: Iba členovia označení ako Newtonsoft.Json.JsonPropertyAttribute alebo System.Runtime.Serialization.DataMemberAttribute je serializovaný. Tento režim serializácie členov je možné nastaviť aj tagovaním trieda so System.Runtime.Serialization.DataContractAttribute. OptIn = 1, // Abstrakt: Všetky verejné aj súkromné polia sú serializované. Členovia môžu byť vylúčení pomocou Newtonsoft.Json.JsonIgnoreAttribute alebo System.NonSerializedAttribute. Tento vzor serializácie členov je tiež v poriadku Nastavte to tak, že triedu označíte System.SerializableAttribute a nastavíte IgnoreSerializableAttribute Nastavte Newtonsoft.Json.Serialization.DefaultContractResolver na false. Polia = 2
Testovací kód:
|
Predchádzajúci:Monitor AppDomainsBudúci:. Najrýchlejšia komponenta na mapovanie objektov v OOM v .NET, Tiny Mapper, v projektovej praxi
|