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

¿Podrías ser algo más amplio sobre donde y como utilizar esta funcionalidad?
ResponderEliminar