2010-10-08 11 views
5

Estoy intentando deserializar un documento Xml a una clase C#. El Xml se ve así:¿Cómo se desearializa un bool de Xml con valores personalizados de verdadero y falso?

<response> 
    <result>Success</result> 
</response> 

Ese resultado puede ser solo "Correcto" o "Fallido". Cuando lo deserializo quiero poner el valor en un bool con "Success" = true y "Failed" = false. Aunque no puedo entender cómo configurar las constantes de verdad y de valse? El código que tengo en este momento se ve así.

[XmlRoot(ElementName="response")] 
public class Response() 
{ 
    [XmlElement(ElementName="result")] 
    public bool Result { get; set; } 
} 

Respuesta

4

Definir otra propiedad que está oculto, lo que lo hace la traducción para usted:

[XmlRoot(ElementName="response")] 
public class Response() 
{ 
    [XmlElement(ElementName="result")] 
    private string ResultInternal { get; set; } 

    [XmlIgnore()] 
    public bool Result{ 
    get{ 
     return this.ResultInternal == "Success"; 
    } 
    set{ 
     this.ResultInternal = value ? "Success" : "Failed"; 
    } 
    } 
} 
+0

he añadido el atributo XmlIgnore a su ejemplo ya que esto es necesario para evitar que dos resultados de acabar en el XML si searialize esta clase . –

+2

Parece que esto solo funciona si ResultInternal es público. –

0

Una solución es tener una enumeración define como sigue y añadir método de extensión:

enum SuccessBool 
{ 
    False = -1, 
    Failed = -2, 
    Failure = -3, 
    Unseccessful = -4,      
    True = 1, 
    Success = 2, 
    Successful = 3 
} 

static class SuccessBoolExtenson 
{ 
    public static bool ToBool(this SuccessBool success) 
    { 
     return (int)success > 0; 
    } 
} 

Esto ayudará con la definición de múltiples definiciones de éxito/sin éxito y todo es de tipo seguro.

Cuestiones relacionadas