serializacion - serialize and deserialize c#
DataContractSerializer es un serializador opt-in. ¿Cómo hacer que se excluya? (4)
Heredé algunas clases con una gran cantidad de atributos. Quiero poder serializarlos para WCF
.
Como DataContractSerializer
es un serializador opt-in, tendré que decorar todas las propiedades con el atributo DataMember
, lo que me parece un poco engorroso. ¿No tengo otro camino para no tener que agregar DataMember
a todas las propiedades?
Tenga en cuenta que la mayoría de mis propiedades deben ser serializadas.
Así es como fue diseñado como se indica en este enlace de MSDN aquí . Otra alternativa es usar XmlSerializer que serialice todos los campos públicos / propiedades. En última instancia, tendrá que sopesar las ventajas y desventajas al considerar DataContractSerializer frente a otro enfoque.
Simplemente no puede marcar sus clases con ninguno de los atributos de serialización comunes (es decir, [DataContract]
/ [Serializable]
) y asegúrese de que todas las propiedades que desea serializar sean públicas get
y set
. Si desea excluir una propiedad determinada, debe marcarla con el atributo [IgnoreDataMember]
.
Ejemplo:
public class Hamster
{
public string Name { get; set; }
[IgnoreDataMember]
public int Age { get; set; }
}
De tipos serializables en MSDN :
Puede aplicar los atributos DataContractAttribute y DataMemberAttribute ... Sin embargo, incluso los tipos que no están marcados con estos atributos se serializan y deserializan. Se aplican las siguientes reglas y excepciones: ...
Todos los campos públicos y las propiedades con los métodos públicos get y set se serializan, a menos que aplique el atributo IgnoreDataMemberAttribute a ese miembro.
Desde dotnet 4.0 y superior,
Puede evitar el atributo [DataContract]
para hacer que todos los miembros public
sean serializable
.
Depende de si sus propiedades pueden generarse automáticamente; de ser así, podría sustituir el serializador WCF. Por lo general, esto se hace para usar JSON.NET en su lugar: