2010-10-08 5 views
5

Sto tentando di deserializzare un documento Xml in una classe C#. L'XML simile a questa:Come si deserializza un bool da Xml con valori veri e falsi personalizzati?

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

Questo risultato può essere solo "successo" o "Failed". Quando lo deserializzo voglio mettere il valore in un bool con "Success" = true e "Failed" = false. Non riesco a capire come impostare le costanti true e valse? Il codice che ho al momento assomiglia a questo.

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

risposta

4

Definire un'altra proprietà che è nascosto, che fa la traduzione per voi:

[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

ho aggiunto l'attributo XmlIgnore per il vostro esempio come questa è necessaria per evitare che due risultati di finire in Xml se searialize questa classe . –

+2

Sembra che questo funzioni solo se ResultInternal è pubblico. –

0

Una soluzione è quella di avere un'enumerazione definito come segue e aggiungere metodo di estensione:

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

Ciò contribuirà con la definizione più definizioni di successo/insuccesso e tutto è SICURO tipo.

Problemi correlati