Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 33737|Svar: 2

[Kilde] Newtonsoft.Json ignorerer DataContract-funktionen

[Kopier link]
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 AppDomains
Næste:. .NETs hurtigste OOM-objektmappingkomponent, Tiny Mapper, i projektpraksis
Opslået på 01/06/2018 13.20.10 |
Bestem om en json-streng er et objekt eller et array
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    tilfælde "Objekt":
                        pause;
                    tilfælde "Array":
                        pause;
                    Standard:
                        pause;
                }
Opslået på 21/08/2020 11.52.32 |
Støt udlejeren er en mester i at bede om lår
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com