|
|
Julkaistu 30.5.2018 16.50.17
|
|
|
|

Newtonsoft.JSONKuten varmaan tiedät, yleisesti käytetyt JSON-sarjallistamis- ja deserialisointityökalut
DataContractAttributeMäärittelee tyypin määrittelemään tai toteuttamaan datasopimuksen, jonka sarjallistaja voi sarjoittaa esimerkiksi DataContractSerializerilla. Tyypin sarjoittamisen mahdollistamiseksi tyypin tekijän on määriteltävä datasopimus sen tyypille.
kohtasi vaikean ongelman,Vanhemmalla luokalla on [DataContract]-ominaisuus, ja lapsiluokka perii vanhemman luokan, ja kaikki aliluokan attribuutit täytyy serialisoida ja deserialisoida [DataMember]-attribuutillaKoska emoluokka on jonkun toisen kapseloitu dll, vanhemman luokan [DataContract]-ominaisuutta ei voi poistaa!
Testi on seuraava: Test1-luokassa on [DataContract]-ominaisuus, ja jos attribuutti ei lisää [DataMember]-ominaisuutta, se aiheuttaa serialisoinnin ja deserialisaation epäonnistumisen, kuten alla olevassa kuvassa on esitetty:
Annotoitiimme Testi1-luokan [DataContract]-ominaisuuden ja havaitsimme, että se voidaan sarjoittaa ja deserialisoida normaalisti seuraavasti:
Onko Newtonsoft.Jsonin edistyneessä käytössä, joka voisi jättää tämän ominaisuuden huomiotta? Vastaus on kyllä!
Käytä vain Json.Netin OptOut-ominaisuutta. Se menee etusijalle DataContractiin nähden.
// Tiivistelmä: Kaikki julkiset jäsenet ovat oletuksena sarjoitettuja. Jäsenet voidaan sulkea pois käyttämällä Newtonsoft.Json.JsonIgnoreAttribute tai System.NonSerializedAttribute. Tämä on oletusjäsenten sarjallistamismalli. OptOut = 0, // Tiivistelmä: Vain jäsenet, jotka on merkitty Newtonsoft.Json.JsonPropertyAttribute tai System.Runtime.Serialization.DataMemberAttribute on sarjamuotoinen. Tämä jäsensarjoitustila voidaan asettaa myös merkitsemällä luokka, jossa on System.Runtime.Serialization.DataContractAttribute. OptIn = 1, // Tiivistelmä: Kaikki julkiset ja yksityiset alat ovat sarjamuotoisia. Jäsenet voidaan sulkea pois käyttämällä Newtonsoft.Json.JsonIgnoreAttribute tai System.NonSerializedAttribute. Tämä jäsenten sarjoittamismalli on myös hyvä Aseta tämä merkitsemällä luokka System.SerializableAttribute ja asettamalla IgnoreSerializableAttribute Aseta Newtonsoft.Json.Serialization.DefaultContractResolver väärin. Kentät = 2
Testikoodi:
|
Edellinen:Monitor AppDomainsSeuraava:. .NETin nopein OOM-objektikartoituskomponentti, Tiny Mapper, projektikäytännössä
|