|
|
Geplaatst op 30-05-2018 16:50:17
|
|
|
|

Newtonsoft.JsonZoals je waarschijnlijk weet, zijn er veelgebruikte JSON-serialisatie- en deserialisatietools
DataContractAttribuutSpecificeert dat type om een datacontract te definiëren of te implementeren dat kan worden geserialiseerd door een serializer zoals DataContractSerializer. Om een type serialiseerbaar te maken, moet de typeauteur een datacontract definiëren voor het type ervan.
stuitte op een moeilijk probleem,De ouderklasse heeft de [DataContract]-functie, en de kindklasse erft de ouderklasse, en alle attributen van de subklasse moeten worden geserialiseerd en gedeserialiseerd met het [DataMember]-attribuutOmdat de ouderklasse de ingekapselde dll van iemand anders is, kan de [DataContract]-functie van de ouderklasse niet worden verwijderd!
De test is als volgt: Test1-klasse heeft de [DataContract]-functie, als het attribuut de [DataMember]-functie niet toevoegt, zal dit serialisatie en deserialisatie veroorzaken, zoals weergegeven in de onderstaande figuur:
We hebben de [DataContract]-functie van klasse Test1 geannoteerd en ontdekt dat deze normaal geserialiseerd en deserialiseerd kan worden, als volgt:
Is er een geavanceerde toepassing van Newtonsoft.Json die deze functie kan negeren? Het antwoord is ja!
Gebruik gewoon de OptOut-eigenschap van Json.Net. Het krijgt voorrang boven het DataContract.
// Samenvatting: Alle publieke leden worden standaard geserialiseerd. Leden kunnen worden uitgesloten met behulp van Newtonsoft.Json.JsonIgnoreAttribute of System.NonSerializedAttribuut. Dit is het standaard patroon voor lidserialisatie. OptOut = 0, // Samenvatting: Alleen leden gelabeld als Newtonsoft.Json.JsonPropertyAttribute of System.Runtime.Serialization.DataMemberAttribute wordt geserialiseerd. Deze lidserialisatiemodus kan ook worden ingesteld door te taggen klasse met System.Runtime.Serialization.DataContractAttribute. OptIn = 1, // Samenvatting: Alle publieke en private sectoren zijn geserialiseerd. Leden kunnen worden uitgesloten met behulp van Newtonsoft.Json.JsonIgnoreAttribute of System.NonSerializedAttribuut. Dit patroon van lidserialisatie is ook prima Stel dit in door de klasse te taggen met System.SerializableAttribute en het IgnoreSerializableAttribute in te stellen Stel Newtonsoft.Json.Serialization.DefaultContractResolver in op false. Velden = 2
Testcode:
|
Vorig:Monitor AppDomainsVolgend:. .NET's snelste OOM-objectmappingcomponent, Tiny Mapper, in projectpraktijk
|