Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 33737|Odpoveď: 2

[Zdroj] Newtonsoft.Json ignoruje funkciu DataContract

[Kopírovať odkaz]
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 AppDomains
Budúci:. Najrýchlejšia komponenta na mapovanie objektov v OOM v .NET, Tiny Mapper, v projektovej praxi
Zverejnené 1. 6. 2018 13:20:10 |
Určte, či je reťazec json objektom alebo poľom
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    prípad "Objekt":
                        prestávka;
                    prípad "Array":
                        prestávka;
                    Predvolené:
                        prestávka;
                }
Zverejnené 21. 8. 2020 11:52:32 |
Podpora prenajímateľa je majster v žiadaní stehien
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com