serializar que leer deserializar deserialización entity-framework serialization datacontractserializer efpocoadapter

entity-framework - leer - que es serializar y deserializar json



DataContractSerializer: cómo serializar clases/miembros sin atributos DataContract/DataMember (3)

DataContractSerializer requiere que las clases y los miembros se DataMember atributos DataContract y DataMember . Sin embargo, en mi caso, las clases se generan automáticamente con el marco EFPocoAdapater y estos atributos no están presentes.

¿Cómo puedo forzar la serialización de todos los miembros que usan DataContractSerializer sin que estos atributos estén presentes?

De Alexdej:

Esto cambió en 3.5SP1, espero que lo hayas visto: http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx


Creo que es posible. Si implementa la interfaz ISerializable, el serializador utiliza su implementación en lugar de los atributos. Aunque creo que todavía tendrá que marcar la clase [Serializable].

Es un poco más trabajo que agregar atributos, pero funciona.


No puedes, claro y simple. El atributo es necesario para que DataContractSerializer recoja los elementos a serializar. En contrato con el XmlSerializer, que básicamente solo serializa todo (a menos que explícitamente le diga que lo ignore), DataContractSerializer es "opt-in" - debe decirle explícitamente (por medio de los atributos) qué campos y / o propiedades serializar

ACTUALIZACIÓN: Como varias personas han señalado, con .NET 3.5 SP1, Microsoft aflojó un poco esas reglas: cualquier propiedad pública de lectura / escritura será serializada automáticamente por DataContractSerializer. Al mismo tiempo, tu clase también necesita tener un constructor predeterminado sin parámetros: suena como los requisitos exactos que teníamos para XmlSerializer cuando ...

Por supuesto, esto:

  • no le permite serializar algo privado; si desea serializarlo, debe exponerlo como propiedad pública de lectura / escritura
  • no le permite especificar un orden elegido definido de los parámetros; solo los usará en el orden en que aparecen en la clase
  • ahora requiere que tenga un constructor sin parámetros en su clase de nuevo para la deserialización

Sigo pensando que estas cosas deberían ser explícitas y claras, haciendo que las que ya no se necesiten abran el camino para la programación floja / descuidada. No me gusta. Pero si lo desea, puede usarlo ahora sin marcar explícitamente sus propiedades con [DataMember] .....

Bagazo


Simplemente marque la clase con el atributo [Serializable]. Cualquier miembro que no desee marca serializada con [NonSerialized]. Tenga en cuenta que [Serializable] hace que todos los campos se serialicen de manera predeterminada, donde [DataContract] serializó por defecto campos, excepto los marcados con [DataMember].