Respuesta

13

Específico para .NET, si tiene dos aplicaciones que usan el mismo sistema de tipo, entonces puede usar la serialización binaria. Por otro lado, si tiene aplicaciones que se encuentran en plataformas diferentes, se recomienda utilizar la serialización XML. Entonces, si estoy escribiendo una aplicación de chat (cliente y servidor), podría usar la serialización binaria, pero si luego decido que debo usar Python para escribir un cliente, es posible que no.

+0

Si incluye el serializador de contrato de datos cuando dice "serialización xml", entonces estoy de acuerdo con usted. –

+0

Muchas gracias por la respuesta – Mahantesh

+6

@Mahantesh @Adel - "binario" no es el problema aquí; ** No es cierto ** que el binario no es interoperable, simplemente: 'BinaryFormatter' (un * ejemplo específico * de un serializador binario) es una mala elección. Hay varios otros. –

2

Si desea una salida fácil de usar o multiplataforma, utilice XML. Además, la serialización XML usa campos públicos y propiedades para serializar y puede cambiar/formatear la salida mediante el uso de atributos y serialización personalizada en el nivel de clase si lo desea. Bin.Ser. usa campos privados para serializar.

+0

suspiro; oh los viejos mitos ... Para contradecir * ambos * puntos; mientras que 'BinaryFormatter' es de hecho un serializador de campo, ** no ** es el único serializador binario, la mayoría se comportan mejor, y' DataContractSerializer' escribe xml, y * a menos que el tipo esté anotado correctamente * actúa como un * campo * serializador. –

+0

DataContractSerializer, WCF? En esta pregunta, ni una palabra sobre eso. – SeeSharp

+0

mi referencia es "serialización xml", que no es lo mismo que 'XmlSerializer'. "serialización xml" es simplemente una categorización; 'XmlSerializer' es un ejemplo específico de una API para" serialización xml ". 'DataContractSerializer ** ** también ** realiza" serialización xml ". –

34

Ambas respuestas existentes se centran en "plataforma cruzada", pero ese es un problema no relacionado. El punto que están haciendo allí es "no use BinaryFormatter si está haciendo multiplataforma", lo cual es totalmente compatible. Sin embargo, hay una gama de formatos de serialización binarios que son muy multiplataforma, siendo protobuf/ASN.1 los mejores ejemplos.

Por lo tanto, veamos lo que cada uno tiene para ofrecer;

  • binario es típicamente más pequeños, por lo general más rápido con el proceso (en ambos extremos), y no editables
  • formatos fácilmente legibles por el hombre/Texto (XML/JSON) tienden a ser más detallado de lo binario (aunque a menudo se comprime bien), pero es bastante fácil trabajar con la mano; pero todo lo que el procesamiento de texto una asignación tiende a hacerlos más lenta
    • xml es muy común es la de servicios web, y se beneficia de gooling apoyo tales como XSD, XSLT y XML robusta editores
    • JSON es el principal actor en el navegador comunicaciones basadas en (a pesar de que también se utiliza en servicios web) - tiende a ser menos formal, pero sigue siendo muy eficaz

Note como la interoperabilidad no es ni una fuerza ni la debilidad de cualquiera, siempre y cuando usted elige un formato binario apropiado!

Here's an answer que compara el tiempo de serialización, la deserialización y las métricas espaciales de la mayoría de los serializadores .NET, para su referencia.

+0

Un poco curioso, ¿cómo encuentras tus viejas respuestas? Hoy traté de localizar una de mis respuestas recientes a alguna pregunta relacionada y me costó encontrarla. –

+0

@ H.B. generalmente a través de google, [por ejemplo] (http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=%2B%22ok+i'll+bite%22+%2Bgravell+site:stackoverflow.com) –

Cuestiones relacionadas