|
|
Postitatud 30.05.2018 16:50:17
|
|
|
|

Newtonsoft.JSONNagu sa ilmselt tead, on levinud JSON-i serialiseerimise ja deserialiseerimise tööriistad
DataContractAttributeMäärab tüübi, mis määratleb või rakendab andmelepingut, mida saab serialiseerija, näiteks DataContractSerializer, abil serialiseerida. Tüübi serialiseerimiseks peab tüübi autor määratlema selle tüübi jaoks andmelepingu.
sattus raskesse probleemi,Vanemklassil on [DataContract] funktsioon ning alamklass pärib vanemklassi ning kõik alamklassi atribuudid tuleb seriaaliseerida ja deserialiseerida [DataMember] atribuudigaKuna vanemklass on kellegi teise kapseldatud dll, ei saa vanemklassi [DataContract] funktsiooni kustutada!
Test on järgmine: Test1 klassil on [DataContract] funktsioon, kui atribuut ei lisa [DataMember] funktsiooni, põhjustab see serialiseerimise ja deserialiseerimise ebaõnnestumise, nagu alloleval joonisel näidatud:
Me annoteerisime klassi Test1 [DataContract] funktsiooni ja leidsime, et seda saab tavapäraselt serialiseerida ja deserialiseerida järgmiselt:
Kas Newtonsoft.JSON-il on mõni keerukas kasutus, mis seda funktsiooni ignoreerib? Vastus on jah!
Kasuta lihtsalt Json.Neti OptOut omadust. See saab olema DataContractist tähtsam.
// Kokkuvõte: Kõik avalikud liikmed on vaikimisi seriaaliseeritud. Liikmeid saab välistada Newtonsoft.Json.JsonIgnoreAttribute abil või System.NonSerializedAttribute. See on vaikimisi liikmete serialiseerimise muster. OptOut = 0, // Kokkuvõte: Ainult liikmed, mis on märgistatud Newtonsoft.Json.JsonPropertyAttribute või System.Runtime.Serialization.DataMemberAttribute on järjejuttu. Seda liikme serialiseerimise režiimi saab määrata ka märgistamise teel klassiga System.Runtime.Serialization.DataContractAttribute. OptIn = 1, // Kokkuvõte: Kõik avalikud ja erasektorid on seriaalis. Liikmeid saab välistada Newtonsoft.Json.JsonIgnoreAttribute abil või System.NonSerializedAttribute. See liikmete seeriastamise muster on samuti täiesti okei Määra see, märgistades klassi System.SerializableAttribute'iga ja määrates IgnoreSerializableAttribute'i Sea Newtonsoft.Json.Serialization.DefaultContractResolver väärtuseks false. Väljad = 2
Testkood:
|
Eelmine:Jälgi AppDomainsJärgmine:. .NET-i kiireim OOM objektide kaardistamise komponent, Tiny Mapper, projektipraktikas
|