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

C# 在C中将XML元素存在反序列化为bool#,c#,xml,deserialization,xml-deserialization,C#,Xml,Deserialization,Xml Deserialization,我正在尝试将一些XML从web服务反序列化到C#POCO中。对于我需要的大多数属性,我都能做到这一点,但是,我需要根据元素是否存在来设置bool属性,但似乎看不到如何做到这一点 示例XML代码段: <someThing test="true"> <someThingElse>1</someThingElse> <target/> </someThing> 1. C#类示例: [Serializable,XmlRoo

我正在尝试将一些XML从web服务反序列化到C#POCO中。对于我需要的大多数属性,我都能做到这一点,但是,我需要根据元素是否存在来设置bool属性,但似乎看不到如何做到这一点

示例XML代码段:

<someThing test="true">
    <someThingElse>1</someThingElse>
    <target/>
</someThing>

1.
C#类示例:

[Serializable,XmlRoot(“某物”)]
公开课
{
[XmlAttribute(“测试”)]
公共布尔测试{get;set;}
[xmlement(“someThingElse”)]
公共int Else{get;set;}
/// 
///如果存在目标元素,则为true,
///否则,错误。
///    
[XmlElement(“目标”)]
公共布尔目标{get;set;}
}
这是我正在处理的实际XML和对象层次结构的一个非常简化的示例,但演示了我试图实现的目标

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


有人有什么想法吗?

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

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

[XmlIgnore]
public bool Target
{
    get
    {
        return this.TempProperty != null;
    }
}

即使存在空元素,TempProperty也不会为null,因此如果
存在,Target将返回
true
,您能解释一下为什么不想使用可为null的类型吗?
当你在你的poco中定义一个int(而不是int?)属性时,它实际上并不代表底层xml,你只会得到这些变量的默认值。
如果您假设在您的xml中不会得到值为0的空/空字符串或整数,那么可以使用Balthy为您的每个属性建议的方法,或者



一般来说,我认为最好创建一个模式来描述我们的xml,并基于它生成类,同时使用可空类型,如果你真的想让类代表底层数据的话。

谢谢,我想得太多了:)我正在反序列化Google搜索设备的结果。如果结果是自动筛选的,
元素中存在元素
,如果结果不是自动筛选的,则元素不存在。我需要设置一个属性来指示结果集是否被过滤-我不认为一个可空布尔值在这种情况下会有什么帮助?在这种情况下使用的可空布尔值用于属性tiself,而不是标记其是否为空/空的布尔值。如果你不关心FI的内容,只想检查它是否存在,那么balthys方法就可以了。可空属性应该用于更高级的场景,当您要检查的现有值是一个数字或任何其他将在类ur的实例中获得默认的非空值时。如果是一个数字类型,比如整数,你在你的类中使用int-FI,它的值总是0,这与null不同。谢谢,我理解null的用途。然而,在这种情况下,它们并不比使用任何非值类型和Balthy建议的简单空检查更好。
元素从来没有值——它只是表示某个东西的元素的存在。因此
Nullable
的值总是
default(T)
或null。
[XmlElement("target", IsNullable = true)]
public string TempProperty { get; set; }

[XmlIgnore]
public bool Target
{
    get
    {
        return this.TempProperty != null;
    }
}