Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 33737|Vastaus: 2

[Lähde] Newtonsoft.Json sivuuttaa DataContract-ominaisuuden

[Kopioi linkki]
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 AppDomains
Seuraava:. .NETin nopein OOM-objektikartoituskomponentti, Tiny Mapper, projektikäytännössä
Julkaistu 1.6.2018 13.20.10 |
Selvitä, onko json-merkkijono objekti vai taulukko
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

kytkin (s.Type.ToString())
                {
                    tapaus "Objekti":
                        tauko;
                    tapaus "Taulukko":
                        tauko;
                    oletus:
                        tauko;
                }
Julkaistu 21.8.2020 11.52.32 |
Tue vuokranantajaa, joka on mestari pyytämään reisiä
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com