|
|
Opslået på 30/05/2018 16.50.17
|
|
|
|

Newtonsoft.JsonSom du sikkert ved, bruger man ofte JSON-serialiserings- og deserialiseringsværktøjer
DataContractAttributeSpecificerer den type til at definere eller implementere en datakontrakt, der kan serialiseres af en serializer som DataContractSerializer. For at gøre en type serialiserbar skal typeforfatteren definere en datakontrakt for dens type.
stødte på et vanskeligt problem,Forældreklassen har [DataContract]-funktionen, og underklassen arver forældreklassen, og alle attributterne i underklassen skal serialiseres og deserialiseres med attributten [DataMember]Da forældreklassen er en andens indkapslede dll, kan [DataContract]-funktionen i forældreklassen ikke slettes!
Testen er som følger: Test1-klassen har [DataContract]-funktionen, hvis attributten ikke tilføjer [DataMember]-funktionen, vil det forårsage fejl i serialisering og deserialisering, som vist i figuren nedenfor:
Vi annoterede [DataContract]-funktionen for klasse Test1 og fandt, at den kan serialiseres og deserialiseres normalt som følger:
Findes der nogen avanceret brug af Newtonsoft.Json, som kan ignorere denne funktion? Svaret er ja!
Brug bare Json.Nets OptOut-egenskab. Den vil have forrang over DataContract.
// Resumé: Alle offentlige medlemmer er som standard serialiserede. Medlemmer kan udelukkes ved hjælp af Newtonsoft.Json.JsonIgnoreAttribute eller System.NonSerializedAttribute. Dette er standardmønsteret for medlemserialisering. OptOut = 0, // Resumé: Kun medlemmer mærket Newtonsoft.Json.JsonPropertyAttribute eller System.Runtime.Serialization.DataMemberAttribute er seriel. Denne medlemsserialiseringstilstand kan også indstilles ved tagging klasse med System.Runtime.Serialization.DataContractAttribute. OptIn = 1, // Resumé: Alle offentlige og private områder er serialiserede. Medlemmer kan udelukkes ved hjælp af Newtonsoft.Json.JsonIgnoreAttribute eller System.NonSerializedAttribute. Dette mønster for medlemsserialisering er også fint Sæt dette ved at tagge klassen med System.SerializableAttribute og sætte IgnoreSerializableAttribute Sæt Newtonsoft.Json.Serialization.DefaultContractResolver til false. Felter = 2
Testkode:
|
Tidligere:Overvåg AppDomainsNæste:. .NETs hurtigste OOM-objektmappingkomponent, Tiny Mapper, i projektpraksis
|