Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 33737|Răspunde: 2

[Sursă] Newtonsoft.Json ignoră funcția DataContract

[Copiază linkul]
Postat pe 30.05.2018 16:50:17 | | | |
Newtonsoft.JsonDupă cum probabil știi, instrumentele de serializare și deserializare JSON sunt folosite frecvent

DataContractAtributSpecifică acel tip pentru a defini sau implementa un contract de date care poate fi serializat de un serializator precum DataContractSerializer. Pentru a face un tip serializabil, autorul tipului trebuie să definească un contract de date pentru tipul său.

m-am confruntat cu o problemă dificilă,Clasa părinte are funcția [DataContract], iar clasa copil moștenește clasa părinte, iar toate atributele subclasei trebuie să fie serializate și deserializate cu atributul [DataMember]Deoarece clasa părinte este DLL-ul încapsulat al altcuiva, funcția [DataContract] a clasei părinte nu poate fi ștearsă!

Testul este următorul: clasa Test1 are funcția [DataContract], dacă atributul nu adaugă funcția [DataMember], va cauza eșecul serializării și deserializării, așa cum se arată în figura de mai jos:




Am adnotat caracteristica [DataContract] din clasa Test1 și am constatat că poate fi serializată și deseriarizată normal, după cum urmează:



Există vreo utilizare avansată a Newtonsoft.Json care să poată ignora această funcție? Răspunsul este da!

Folosește proprietatea OptOut a Json.Net. Va avea prioritate față de DataContract.

//
        Rezumat:
        Toți membrii publici sunt serializați implicit. Membrii pot fi excluși folosind Newtonsoft.Json.JsonIgnoreAttribute
        sau System.NonSerializedAttribute. Acesta este modelul implicit de serializare a membrilor.
        OptOut = 0,
        //
        Rezumat:
        Doar membrii etichetați Newtonsoft.Json.JsonPropertyAttribute sau System.Runtime.Serialization.DataMemberAttribute
        este serializată. Acest mod de serializare a membrilor poate fi setat și prin etichetare
        clasă cu System.Runtime.Serialization.DataContractAttribute.
        OptIn = 1,
        //
        Rezumat:
        Toate domeniile publice și private sunt serializate. Membrii pot fi excluși folosind Newtonsoft.Json.JsonIgnoreAttribute
        sau System.NonSerializedAttribute. Acest model de serializare a membrilor este, de asemenea, în regulă
        Setează acest lucru etichetând clasa cu System.SerializableAttribute și setând IgnoreSerializableAttribute
        Setează Newtonsoft.Json.Serialization.DefaultContractResolver pe false.
        Câmpuri = 2


Cod de test:







Precedent:Monitorizarea domeniilor de aplicații
Următor:. Cea mai rapidă componentă de mapare a obiectelor OOM a .NET, Tiny Mapper, în practica proiectului
Postat pe 01.06.2018 13:20:10 |
Determină dacă un șir json este un obiect sau un tablou
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

comutator (s.Type.ToString())
                {
                    cazul "Obiect":
                        pauză;
                    cazul "Array":
                        pauză;
                    Implicit:
                        pauză;
                }
Postat pe 21.08.2020 11:52:32 |
Sprijinul proprietarului este un maestru în a cere coapse
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com