2010-10-08 391 views
5

我想将一个Xml文档反序列化为一个C#类。 Xml看起来像这样:如何用xml自定义true和false值来设置布尔值?

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

该结果可能只有“成功”或“失败”。当我反序列化它时,我想把值设为“成功”= true和“失败”= false的布尔值。我不知道如何设置true和valse常量?我目前的代码看起来像这样。

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

回答

4

定义是隐藏的另一个属性,它确实翻译为您提供:

[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

我加入了XmlIgnore属性的例子,因为这是为了防止两个结果在XML中结束了,如果你searialize该类。 – 2010-10-08 12:56:26

+2

看来,这只适用于ResultInternal是公共的。 – 2010-10-08 13:51:35

0

一种解决方案是有一个枚举定义如下,并添加扩展方法:

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

这将定义成功/失败和所有是类型安全的多重定义帮助。

相关问题