Serialización de clases que contienen genéricos con compatibilidad hacia atrás
-
09-09-2019 - |
Pregunta
Estoy tratando de encontrar la mejor manera de manejar la serialización en mi programa.
quiero serializar campos privados (por lo serializador XML ninguna opción) Quiero serializar tipos genéricos como BindingList (SoapSerializer hay opción) También quiero proporcionar un cierto nivel de soporte para poder deserializar objetos de versiones anteriores de mi programa.
Así que todo lo que me queda es la BinarySerializer, y la implementación de la interfaz ISerializable para hacer frente a la compatibilidad hacia adelante.
¿Es esto correcto?
Nota: Debo decir que me encontré con este proyecto. Sin embargo, el proyecto parecía muerto y yo no podía hacerlo funcionar (archivo de error que falta) http://sourceforge.net/project/showfiles.php?group_id=196509
Solución
Con BinaryFormatter
, puede utilizar [OptionalField]
, pero esto sigue siendo muy frágil .
Alternativamente, DataContractSerializer
soporta serialización campo; acaba de establecer [DataMember]
en contra de sus campos en lugar de las propiedades (requiere .NET 3.0).
Otros consejos
Sí, que había necesidad de poner en práctica ISerializable.
Los puntos clave son los siguientes
- Implementar GetObjectData (información SerializationInfo, el contexto StreamingContext). Aquí es necesario añadir pares de claves en la información objeto.
- Implementar la serialización constructor MiClase (información SerializationInfo, el contexto StreamingContext). Aquí lo que se necesita para obtener los valores del objeto de información.