Sono confuso - quando dovrei usare la serializzazione XML e quando dovrei usare la serializzazione binaria nel framework .NET?Quando utilizzare la serializzazione XML o la serializzazione binaria nel framework .NET?
risposta
Specifico per .NET, se si dispone di due applicazioni che utilizzano lo stesso sistema di tipi, è possibile utilizzare la serializzazione binaria. D'altra parte se si dispone di applicazioni che si trovano su piattaforme diverse, si consiglia di utilizzare la serializzazione XML. Quindi, se sto scrivendo un'applicazione di chat (client e server), potrei usare la serializzazione binaria, ma se poi deciderò che dovrei usare Python per scrivere un client, allora potrei non farlo.
Se si include il serializzatore del contratto dati quando si dice "serializzazione xml", sono d'accordo con te. –
Grazie mille per la risposta – Mahantesh
@Mahantesh @Adeel - "binario" non è il problema qui; È ** non ** vero che il binario non è interoperabile - semplicemente: 'BinaryFormatter' (un * esempio specifico * di un serializzatore binario) è una scelta sbagliata. Ce ne sono molti altri –
Se si desidera un output facile da usare o multipiattaforma, utilizzare XML. Inoltre, la serializzazione XML utilizza i campi pubblici e le proprietà per la serializzazione ed è possibile modificare/riformattare l'output utilizzando gli attributi e la serializzazione personalizzata a livello di classe, se si desidera. Bin.Ser. usa i campi privati per serializzare.
Sigh; oh i vecchi miti ... Per contraddire * entrambi * punti; mentre 'BinaryFormatter' è davvero un serializzatore di campo, è ** non ** l'unico serializzatore binario - la maggior parte degli altri sono di gran lunga migliori - e allo stesso modo,' DataContractSerializer' scrive xml, e * a meno che il tipo sia annotato correttamente * funge da * campo * serializzatore. –
DataContractSerializer, WCF? In questa domanda non si parla di questo. – SeeSharp
il mio riferimento è "serializzazione xml", che non è la stessa di 'XmlSerializer'. "serializzazione xml" è semplicemente una categorizzazione; 'XmlSerializer' è un esempio specifico di API per" serializzazione xml ". 'DataContractSerializer' ** anche ** esegue" serializzazione xml ". –
Entrambe le risposte esistenti si concentrano su "cross platform", ma questo è un problema non correlato. Il punto che stanno facendo lì è "non usare BinaryFormatter
se si sta facendo cross-platform" - che io sostengo completamente. Tuttavia esiste una gamma di formati di serializzazione binaria che sono molto multipiattaforma - protobuf/ASN.1 sono esempi primari.
Quindi, guardiamo invece a ciò che ciascuno ha da offrire;
- binaria è in genere più piccoli, in genere più veloce al processo (ad entrambe le estremità), e non modificabili
- formati facilmente leggibili/Testo (XML/JSON) tendono ad essere più prolisso di binario (anche se spesso comprime bene), ma è piuttosto facile lavorare a mano; ma tutto ciò che l'elaborazione del testo una mappatura tende a renderli più lento
- XML è molto comune è web-services, e gode di gooling supporto come XSD, XSLT e XML robusti editori
- JSON è il principale attore in del browser Comms basati (anche se è utilizzato anche in web-services) - tende ad essere meno formale, ma ancora molto efficace
Notate come l'interoperabilità non è né un punto di forza, né la debolezza di entrambi, fino a quando si sceglie un formato binario appropriato!
Here's an answer che confronta il tempo di serializzazione, la deserializzazione e le metriche dello spazio della maggior parte dei serializzatori .NET, come riferimento.
Un po 'curioso, come trovi le tue vecchie risposte? Proprio oggi ho provato a rintracciare una delle mie recenti risposte ad alcune domande correlate e ho avuto difficoltà a trovarlo. –
@ H.B. solitamente tramite google, [ad esempio] (http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=%2B%22ok+i'll+bite%22+%2Bgravell+site:stackoverflow.com) –
Utilizzare la serializzazione binaria quando si desidera il binario? Dov'è la confusione? –
Voglio solo? o qualche circostanza dovrebbe? –