|
|
Objavljeno na 30. 05. 2018 16:50:17
|
|
|
|

Newtonsoft.JsonKot verjetno veste, pogosto uporabljena orodja za serializacijo in deserializacijo v JSON-u
DataContractAttributeDoloča to vrsto za definiranje ali implementacijo podatkovne pogodbe, ki jo lahko serializira serializator, kot je DataContractSerializer. Da bi bil tip serializiran, mora avtor tipa definirati podatkovno pogodbo za njegov tip.
se je soočil s težko težavo,Nadroditeljski razred ima funkcijo [DataContract], otrok razred pa podeduje nadrejen razred, vsi atributi podrazreda pa morajo biti serializirani in deserializirani z atributom [DataMember]Ker je nadrejen razred enkapsulirani dll nekoga drugega, funkcije [DataContract] nadrejenega razreda ni mogoče izbrisati!
Test je naslednji: Razred Test1 ima funkcijo [DataContract], če atribut ne doda funkcije [DataMember], bo to povzročilo neuspeh serializacije in deserializacije, kot je prikazano na spodnji sliki:
Označili smo lastnost [DataContract] razreda Test1 in ugotovili, da jo je mogoče normalno serializirati in deserializirati, kot sledi:
Ali obstaja kakšna napredna uporaba Newtonsoft.json, ki lahko to funkcijo ignorira? Odgovor je da!
Preprosto uporabi Json.Net-ovo lastnost OptOut. Ta bo imel prednost pred DataContractom.
// Povzetek: Vsi javni člani so privzeto serializirani. Člane je mogoče izključiti z uporabo Newtonsoft.Json.JsonIgnoreAttribute ali System.NonSerializedAttribute. To je privzeti vzorec serializacije članov. OptOut = 0, // Povzetek: Samo člani označeni kot Newtonsoft.Json.JsonPropertyAttribute ali System.Runtime.Serialization.DataMemberAttribute je serializiran. Ta način serializacije članov je mogoče nastaviti tudi z označevanjem razred s System.Runtime.Serialization.DataContractAttribute. OptIn = 1, // Povzetek: Vsa javna in zasebna polja so serializirana. Člane je mogoče izključiti z uporabo Newtonsoft.Json.JsonIgnoreAttribute ali System.NonSerializedAttribute. Ta vzorec serializacije članov je prav tako v redu To nastavite tako, da razred označite s System.SerializableAttribute in nastavite IgnoreSerializableAttribute Nastavite Newtonsoft.Json.Serialization.DefaultContractResolver na false. Polja = 2
Testna koda:
|
Prejšnji:Monitor AppDomainsNaslednji:. .NET-ova najhitrejša komponenta za preslikavo objektov v OOM, Tiny Mapper, v projektni praksi
|