¿Cuáles son las mejores prácticas para almacenar y mantener objetos serializados en C #? ¿Alguna estrategia o patrón que aplique?
Lo que he llegado a creer hasta ahora es esto:
- Prefiero Json sobre XML, tanto por espacio como por velocidad, pero xml es más fácil de consultar / extraer datos a través de LINQ to XML para conjuntos de datos más grandes.
- Para cada propiedad individual, asigne explícitamente a un nombre serializado. En el futuro, cuando necesite cambiar el nombre de una propiedad, sus datos serializados no se romperán. Los atributos ayudan con esto.
- Almacene algún tipo de información de versión en el objeto serializado, en caso de que necesite migrar datos en masa en el futuro
Actualización: (que descubrí por las malas)
- Almacene todas las fechas de manera uniforme en toda la aplicación y en todas las versiones. Tanto en formato como en zona horaria.
c#
patterns-and-practices
serialization
Mihalis Bagos
fuente
fuente
Respuestas:
He hecho bastante serialización a lo largo de los años. Aquí hay algunas cosas que se nos ocurrieron:
Prefiere formatos legibles por humanos sobre formatos binarios. Generalmente prefiero Xml a Json principalmente porque puedes usar Xslt para transformar Xml cuando necesites actualizar la versión.
Independientemente de lo que esté serializando, la lógica de deserialización y el almacenamiento de datos deben permitir el control de versiones de los datos serializados. La información de la versión probablemente debería estar fuera de los datos serializados, lo que facilita un poco el acceso y la elección de la estrategia de deserialización correcta.
Su serialización debe tener pruebas unitarias que se ejecuten en ambos sentidos. Es decir, debe hacerse una prueba deserializando los datos y confirmando que todo se importó correctamente. Y debe tener algo que serialice los datos y confirme que sale como json y xml correctos.
Si el punto de dicha serialización es multiplataforma, pruebe contra la otra plataforma. Probablemente no sea tan problemático ahora como las plataformas han madurado, pero hubo momentos en que las cosas no estaban de acuerdo sobre cómo se debería formatear json.
fuente
Los puntos mencionados son prácticos y es bueno tenerlos en cuenta. Me gustaría mencionar diferentes tipos de serializaciones que pueden ser útiles para considerar dependiendo de las necesidades de su aplicación.
storage
osocket-based network
flujos.Más información de la fuente oficial: programación de MSDN C #
Además, todo esto debe ser prácticas dentro del proceso SDLC (es decir, tener un entorno para probar, control de versiones, etc.)
fuente