在C#中将XML元素的存在反序列化为bool

Jam*_*imm 11 c# xml xml-deserialization deserialization

我正在尝试将一些XML从Web服务反序列化为C#POCO.我已经将这个工作用于我需要的大多数属性,但是,我需要根据元素是否存在来设置bool属性,但似乎无法看到如何执行此操作?

一个示例XML片段:

<someThing test="true">
    <someThingElse>1</someThingElse>
    <target/>
</someThing>
Run Code Online (Sandbox Code Playgroud)

一个示例C#类:

[Serializable, XmlRoot("someThing")]
public class Something
{
    [XmlAttribute("test")]
    public bool Test { get; set; }

    [XmlElement("someThingElse")]
    public int Else { get; set; }

    /// <summary>
    /// <c>true</c> if target element is present,
    /// otherwise, <c>false</c>.
    /// </summary>   
    [XmlElement("target")]
    public bool Target { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我正在处理的实际XML和对象层次结构的一个非常简化的示例,但演示了我正在尝试实现的内容.

我读过的与反序列化null/empty元素相关的所有其他问题似乎都涉及到使用Nullable<T>,而这并不是我需要的.

有没有人有任何想法?

小智 13

一种方法是使用不同的属性来获取元素的值,然后使用Target属性来获取该元素是否存在.像这样.

[XmlElement("target", IsNullable = true)]
public string TempProperty { get; set; }

[XmlIgnore]
public bool Target
{
    get
    {
        return this.TempProperty != null;
    }
}
Run Code Online (Sandbox Code Playgroud)

即使存在空元素,TempProperty也不会为null,因此true如果<target />存在,Target将返回