¿Hay alguna manera de elegir los valores predeterminados de los atributos que no están en el archivo xml durante la deserialización?
Si el atributo mAge
no está presente en el archivo xml, quiero usar un valor predeterminado de 18. ¿Es posible?DataContract, valor predeterminado de DataMember
[DataContract]
public class Person
{
public Person()
{
}
[DataMember(Name = "Name")]
public string mName { get; set; }
[DataMember(Name = "Age")]
public int mAge { get; set; }
[DataMember(Name = "Single")]
public bool mIsSingle { get; set; }
};
Editar para dar la respuesta.
[DataContract]
public class Person
{
public Person()
{
}
[DataMember(Name = "Name")]
public string mName { get; set; }
[DataMember(Name = "Age")]
public int? mAge { get; set; }
[DataMember(Name = "Single")]
public bool? mIsSingle { get; set; }
[System.Runtime.Serialization.OnDeserialized]
void OnDeserialized(System.Runtime.Serialization.StreamingContext c)
{
mAge = (mAge == null ? 18 : mAge); // 18 is the default value
}
}
Puedo usar su respuesta si deseo anular el valor de un objeto, porque cuando la referencia se establece en nulo, sé que el atributo no está presente en el archivo xml. Pero, ¿cómo puedo saber si hay un atributo booleano o uno int en el archivo xml? Si el valor para un bolean se establece en falso o un int se establece en 0. No puedo distinguir antes de atribuir atributos y atributos asignados al valor predeterminado de C#. – BuzBuza
Como la deserilización intentará establecer valores predeterminados para los datos faltantes en una estructura determinada, su única opción es verificar valores válidos, por ejemplo, cuando actualicé mi respuesta y comprobé si la edad era == 0 y luego establecí su valor. –
Puede usar tipos que aceptan nulos para moverse int y null, por favor mire mi ans actualizado. –