Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 33737|Odpověď: 2

[Zdroj] Newtonsoft.Json ignoruje funkci DataContract

[Kopírovat odkaz]
Zveřejněno 30.05.2018 16:50:17 | | | |
Newtonsoft.JsonJak asi víte, běžně používané nástroje pro serializaci a deserializaci v JSONu

DataContractAttributeSpecifikuje tento typ pro definování nebo implementaci datové smlouvy, kterou může serializovat serializátor, například DataContractSerializer. Aby byl typ serializovatelný, musí autor typu definovat datovou smlouvu pro jeho typ.

narazil na obtížný problém,Mateřská třída má funkci [DataContract] a podtřída dědí třídu rodiče a všechny atributy této podtřídy musí být serializovány a deserializovány pomocí atributu [DataMember]Protože nadřazená třída je zapouzdřené DLL někoho jiného, funkce [DataContract] v nadřazené třídě nemůže být smazána!

Test je následující: Třída Test1 má funkci [DataContract], pokud atribut nepřidá funkci [DataMember], způsobí selhání serializace a deserializace, jak je znázorněno na obrázku níže:




Anotovali jsme funkci [DataContract] třídy Test1 a zjistili jsme, že ji lze normálně serializovat a deserializovat, a to následovně:



Existuje nějaké pokročilé využití Newtonsoft.Json, které by tuto funkci ignorovalo? Odpověď je ano!

Stačí použít vlastnost OptOut v Json.Net. Bude mít přednost před DataContract.

//
        Abstrakt:
        Všichni veřejní členové jsou ve výchozím nastavení serializováni. Členy lze vyloučit pomocí Newtonsoft.Json.JsonIgnoreAttribute
        nebo System.NonSerializedAttribute. Toto je výchozí vzor serializace členů.
        OptOut = 0,
        //
        Abstrakt:
        Pouze členové označení Newtonsoft.Json.JsonPropertyAttribute nebo System.Runtime.Serialization.DataMemberAttribute
        je serializován. Tento režim serializace členů lze také nastavit tagováním
        třída s atributem System.Runtime.Serialization.DataContractAttribute.
        OptIn = 1,
        //
        Abstrakt:
        Všechna veřejná i soukromá pole jsou serializována. Členy lze vyloučit pomocí Newtonsoft.Json.JsonIgnoreAttribute
        nebo System.NonSerializedAttribute. Tento vzor serializace členů je také v pořádku
        Nastavte to označením třídy pomocí System.SerializableAttribute a nastavením atributu IgnoreSerializableAttribute
        Nastavte Newtonsoft.Json.Serialization.DefaultContractResolver na false.
        Pole = 2


Testovací kód:







Předchozí:Monitor AppDomains
Další:. Nejrychlejší komponenta pro mapování objektů v OOM v .NET, Tiny Mapper, v projektové praxi
Zveřejněno 01.06.2018 13:20:10 |
Určeme, zda je json řetězec objektem nebo polem
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    případ "Objekt":
                        pauza;
                    případ "Array":
                        pauza;
                    Výchozí:
                        pauza;
                }
Zveřejněno 21.08.2020 11:52:32 |
Podpora, pronajímatel je mistr v tom, jak si žádat stehna
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com