Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 33737|Risposta: 2

[Fonte] Newtonsoft.Json ignora la funzione DataContract

[Copiato link]
Pubblicato su 30/05/2018 16:50:17 | | | |
Newtonsoft.JsonCome probabilmente sapete, gli strumenti di serializzazione e deserializzazione JSON sono comunemente usati

DataContrattoAttributoSpecifica quel tipo per definire o implementare un contratto dati che può essere serializzato da un serializer come DataContractSerializer. Per rendere un tipo serializzabile, l'autore del tipo deve definire un contratto dati per il suo tipo.

incontrò un problema difficile,La classe genitore ha la funzione [DataContract], e la classe figlia eredita la classe genitore, e tutti gli attributi della sottoclasse devono essere serializzati e deerializzati con l'attributo [DataMember]Poiché la classe madre è la dll incapsulata di qualcun altro, la funzione [DataContract] della classe madre non può essere cancellata!

Il test è il seguente: la classe Test1 ha la funzione [DataContract], se l'attributo non aggiunge la funzione [DataMember], causerà il fallimento della serializzazione e della deserializzazione, come mostrato nella figura sottostante:




Abbiamo annotato la caratteristica [DataContract] della classe Test1 e abbiamo scoperto che può essere serializzata e deerializzata normalmente, come segue:



Esiste qualche uso avanzato di Newtonsoft.Json che possa ignorare questa funzione? La risposta è sì!

Basta usare la proprietà OptOut di Json.Net. Avrà la precedenza sul DataContract.

//
        Astratto:
        Tutti i membri pubblici sono serializzati di default. I membri possono essere esclusi usando Newtonsoft.Json.JsonIgnoreAttribute
        o System.NonSerializedAttribute. Questo è il pattern predefinito di serializzazione dei membri.
        OptOut = 0,
        //
        Astratto:
        Solo i membri etichettati Newtonsoft.Json.JsonPropertyAttribute o System.Runtime.Serialization.DataMemberAttribute
        è serializzato. Questa modalità di serializzazione dei membri può essere impostata anche tramite tagging
        classe con System.Runtime.Serialization.DataContractAttribute.
        OptIn = 1,
        //
        Astratto:
        Tutti i campi pubblici e privati sono serializzati. I membri possono essere esclusi usando Newtonsoft.Json.JsonIgnoreAttribute
        o System.NonSerializedAttribute. Anche questo schema di serializzazione dei membri va bene
        Imposta questo taggando la classe con System.SerializableAttribute e impostando IgnoreSerializableAttribute
        Imposta Newtonsoft.Json.Serialization.DefaultContractResolver su false.
        Campi = 2


Codice di test:







Precedente:Monitorare AppDomains
Prossimo:. Il componente di mappatura OOM più veloce di .NET, Tiny Mapper, nella pratica del progetto
Pubblicato su 01/06/2018 13:20:10 |
Determina se una stringa json è un oggetto o un array
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

interruttore (s.Type.ToString())
                {
                    caso "Oggetto":
                        pausa;
                    caso "Array":
                        pausa;
                    Predefinito:
                        pausa;
                }
Pubblicato su 21/08/2020 11:52:32 |
Supporto il proprietario è un maestro nel chiedere cosce
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com