|
|
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țiiUrmător:. Cea mai rapidă componentă de mapare a obiectelor OOM a .NET, Tiny Mapper, în practica proiectului
|