Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 33737|Svar: 2

[Källa] Newtonsoft.Json ignorerar DataContract-funktionen

[Kopiera länk]
Publicerad på 2018-05-30 16:50:17 | | | |
Newtonsoft.JsonSom du säkert vet används vanliga JSON-serialiserings- och deserialiseringsverktyg

DataContractAttributeSpecificerar den typen för att definiera eller implementera ett datakontrakt som kan serialiseras av en serializer såsom DataContractSerializer. För att göra en typ serialiserbar måste typförfattaren definiera ett datakontrakt för dess typ.

stötte på ett svårt problem,Föräldraklassen har funktionen [DataContract], och barnklassen ärver föräldraklassen, och alla attribut för underklassen måste serialiseras och deserialiseras med attributet [DataMember].Eftersom föräldraklassen är någon annans inkapslade dll kan [DataContract]-funktionen i föräldraklassen inte tas bort!

Testet är följande: Test1-klassen har funktionen [DataContract], om attributet inte lägger till funktionen [DataMember] kommer det att orsaka att serialisering och deserialisering misslyckas, som visas i figuren nedan:




Vi annoterade [DataContract]-funktionen för klass Test1 och fann att den kan serialiseras och deserialiseras normalt, enligt följande:



Finns det någon avancerad användning av Newtonsoft.Json som kan ignorera denna funktion? Svaret är ja!

Använd bara Json.Nets OptOut-egenskap. Den kommer att ha företräde framför DataContract.

//
        Sammanfattning:
        Alla offentliga medlemmar är serielerade som standard. Medlemmar kan exkluderas med Newtonsoft.Json.JsonIgnoreAttribute
        eller System.NonSerializedAttribute. Detta är standardmönstret för medlemsserialisering.
        OptOut = 0,
        //
        Sammanfattning:
        Endast medlemmar märkta Newtonsoft.Json.JsonPropertyAttribute eller System.Runtime.Serialization.DataMemberAttribute
        är seriel. Detta medlemsserialiseringsläge kan också ställas in genom taggning
        klass med System.Runtime.Serialization.DataContractAttribute.
        OptIn = 1,
        //
        Sammanfattning:
        Alla offentliga och privata områden är serielåda. Medlemmar kan exkluderas med Newtonsoft.Json.JsonIgnoreAttribute
        eller System.NonSerializedAttribute. Detta mönster för medlemsserialisering är också okej
        Sätt detta genom att tagga klassen med System.SerializableAttribute och sätta IgnoreSerializableAttribute
        Sätt Newtonsoft.Json.Serialization.DefaultContractResolver till false.
        Fält = 2


Testkod:







Föregående:Övervaka AppDomains
Nästa:. .NET:s snabbaste OOM-objektmappningskomponent, Tiny Mapper, i projektpraxis
Publicerad på 2018-06-01 13:20:10 |
Avgör om en json-sträng är ett objekt eller en array
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    fallet "Object":
                        paus;
                    fall "Array":
                        paus;
                    Standard:
                        paus;
                }
Publicerad på 2020-08-21 11:52:32 |
Stöd, hyresvärden är en mästare på att be om lår
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com