Serialización: ¿Será un problema cambiar la clase subyacente?

Estoy tratando de entender la serialización. Pero, ¿qué sucede si por alguna razón necesito agregar o eliminar algunos valores o propiedades? ¿Cómo afectará esto a los contenidos? ¿O esto no es un problema? O como puedo evitar esto?

preguntado el 12 de junio de 12 a las 17:06

Depende del mecanismo de serialización que esté utilizando. Formateador binario? XmlSerializador? Json.NET? Este es un tema moderadamente complicado. -

Oh, lo siento. Estaba usando XmlSerializer para aprender, luego planeé pasar a BinaryFormatter para el almacenamiento de SQL. Esto es más complicado de lo que pensaba, lo entiendo. -

Te recomiendo encarecidamente no para pasar a BinaryFormatter para el almacenamiento de SQL; no es (en mi opinión) adecuado para el almacenamiento durante cualquier duración. Humildemente presento que protobuf-net puede ser una mejor opción (soy el autor; es gratis, etc., y está diseñado específicamente para evitar muchos de los problemas en BinaryFormatter) -

3 Respuestas

Como la gente ya señaló, depende de su serializador. XmlSerializer es algo más fácil de manejar en este caso:

  1. El serializador funciona contra la interfaz pública, por lo que si cambia la implementación, nada sale mal.
  2. XML es legible por humanos y, por lo tanto, fácil de analizar a mano o con algunas utilidades XML. Por lo tanto, podría escribir un convertidor de versión si todo lo demás sale mal.

Considere la respuesta de Jon para obtener más consejos, especialmente con NonSerialized y OptionalField los atributos.

Respondido el 12 de junio de 12 a las 19:06

Todo depende de la técnica de serialización que esté utilizando y si planea deserializar objetos heredados.

Te creo puede se encuentra con algunos problemas si agrega o elimina propiedades y aún desea deserializar versiones anteriores de sus objetos, según el tipo de serialización que esté realizando.

Para Formateador binario y Formato de jabón:

  • Si agrega nuevas propiedades, deberá adornarlas con el Atributo de campo opcional para que aún pueda deserializar versiones anteriores de su objeto que no tienen el nuevo campo.
  • Si está "eliminando" propiedades, tendrá que dejarlas en el código, pero adornarlas con el Atributo de campo opcional para que aún pueda deserializar versiones anteriores de su objeto que aún tienen el campo eliminado.

Respondido el 12 de junio de 12 a las 17:06

Puedo hablar por XmlSerializer, ya que se usa ampliamente en mi propio proyecto.

Agregar propiedades no causa ningún problema con XmlSerializer, las propiedades que faltan del xml serializado simplemente mantendrán su valor predeterminado. El efecto de eliminar o cambiar el nombre de las propiedades existentes es simplemente la pérdida de datos. A menos que trate con el xml AS xml original, o un archivo de texto, los datos en las propiedades eliminadas o renombradas simplemente se perderán. No se necesitan atributos especiales para agregar, quitar o cambiar el nombre de las propiedades cuando se usa XmlSerializer.

Respondido el 12 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.