Hoy necesitaba inicializar un atributo de una clase de un
DataContract y intuitivamente la forma de hacerlo sería inicializando esa variable en el constructor
de la clase. Como por ejemplo:
[DataContract] public class Person { private string _Name; public Person() { this.Name = "No Name"; } [DataMember] public string Name { get { return _Name; } set { _Name = value; } } }
Bueno pues esto no funciona. En la deserialización nunca se
llaman a constructores.
Así que para solucionar esto he encontrado este maravilloso POST donde explican
los eventos que ocurren en la deserialización y cómo usar los deserialization
callbacks podía ser de ayuda en la resolución del problema. Así que solo necesitaba inicializar los valores que necesitaba en el evento OnSerializing.
![]() |
Eventos en la serialización |
Así nuestro código ahora funcional quedaría:
[DataContract] public class Person { private string _Name; [OnDeserializing] void OnDeserializing(StreamingContext context) { this.Name = "No Name"; } [DataMember] public string Name { get { return _Name; } set { _Name = value; } } }