Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 33737|Atsakyti: 2

[Šaltinis] Newtonsoft.Json ignoruoja DataContract funkciją

[Kopijuoti nuorodą]
Paskelbta 2018-05-30 16:50:17 | | | |
Newtonsoft.JsonKaip tikriausiai žinote, dažniausiai naudojami JSON serializavimo ir deserializavimo įrankiai

DataContractAttributeNurodo šį tipą, kad apibrėžtų arba įgyvendintų duomenų sutartį, kurią gali nuosekliai suskirstyti serializatorius, pvz., DataContractSerializer. Kad tipą būtų galima suskirstyti nuosekliai, tipo autorius turi apibrėžti jo tipo duomenų sutartį.

susidūrė su sunkia problema,Pirminė klasė turi [DataContract] funkciją, o antrinė klasė paveldi pirminę klasę, o visi poklasio atributai turi būti suskirstyti į eilutes ir deserializuoti naudojant atributą [DataMember]Kadangi pirminė klasė yra kažkieno inkapsuliuota dll, pirminės klasės funkcijos [DataContract] panaikinti negalima!

Testas yra toks: Test1 klasė turi [DataContract] funkciją, jei atributas neprideda [DataMember] funkcijos, serializavimas ir deserializavimas nepavyks, kaip parodyta paveikslėlyje žemiau:




Mes komentavome Test1 klasės [DataContract] funkciją ir nustatėme, kad ją galima nuosekliai ir deserializuoti įprastai, kaip nurodyta toliau:



Ar yra koks nors išplėstinis Newtonsoft.Json naudojimas, kuris gali ignoruoti šią funkciją? Atsakymas yra taip!

Tiesiog naudokite Json.Net OptOut ypatybę. Ji turės viršenybę prieš "DataContract".

//
        Anotacija:
        Visi viešieji nariai pagal numatytuosius nustatymus yra suskirstyti į eilutes. Narius galima pašalinti naudojant Newtonsoft.Json.JsonIgnoreAttribute
        arba System.NonSerializedAttribute. Tai numatytasis nario serializavimo šablonas.
        OptOut = 0,
        //
        Anotacija:
        Tik nariai, pažymėti Newtonsoft.Json.JsonPropertyAttribute arba System.Runtime.Serialization.DataMemberAttribute
        yra serijinis. Šį nario serializavimo režimą taip pat galima nustatyti žymint
        klasė su System.Runtime.Serialization.DataContractAttribute.
        OptIn = 1,
        //
        Anotacija:
        Visi viešieji ir privatūs laukai yra serijiniai. Narius galima pašalinti naudojant Newtonsoft.Json.JsonIgnoreAttribute
        arba System.NonSerializedAttribute. Šis nario serializacijos modelis taip pat tinka
        Nustatykite tai pažymėdami klasę System.SerializableAttribute ir nustatydami IgnoreSerializableAttribute
        Nustatykite Newtonsoft.Json.Serialization.DefaultContractResolver į false.
        Laukai = 2


Bandymo kodas:







Ankstesnis:Stebėkite "AppDomains"
Kitą:. .NET greičiausias OOM objektų atvaizdavimo komponentas "Tiny Mapper" projekto praktikoje
Paskelbta 2018-06-01 13:20:10 |
Nustatykite, ar json eilutė yra objektas, ar masyvas
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

jungiklis (s.Type.ToString())
                {
                    atvejis "Objektas":
                        pertrauka;
                    atvejis "Masyvas":
                        pertrauka;
                    Numatytasis:
                        pertrauka;
                }
Paskelbta 2020-08-21 11:52:32 |
Parama nuomotojui yra meistras prašyti šlaunų
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com