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; } } }