Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 33737|Antwoord: 2

[Bron] Newtonsoft.Json negeert de DataContract-functie

[Link kopiëren]
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 AppDomains
Volgend:. .NET's snelste OOM-objectmappingcomponent, Tiny Mapper, in projectpraktijk
Geplaatst op 01-06-2018 13:20:10 |
Bepaal of een json-string een object of een array is
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    case "Object":
                        pauze;
                    case "Array":
                        pauze;
                    Standaard:
                        pauze;
                }
Geplaatst op 21-08-2020 11:52:32 |
Steun de verhuurder is een meester in het vragen om dijen
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com