声明为xs:boolean的XML属性可以接受"true"、"false"、"0"或"1"。然而,在.NET中,Boolean.Parse()仅接受"true"或"false"。如果它看到"0"或"1",它会抛出“Bad Format”异常。
那么,如何将这样的值解析为布尔值呢?
(不幸的是,我只能使用.NET 2.0解决方案,但如果v3.5提供了某些内容,我很乐意了解。)
声明为xs:boolean的XML属性可以接受"true"、"false"、"0"或"1"。然而,在.NET中,Boolean.Parse()仅接受"true"或"false"。如果它看到"0"或"1",它会抛出“Bad Format”异常。
那么,如何将这样的值解析为布尔值呢?
(不幸的是,我只能使用.NET 2.0解决方案,但如果v3.5提供了某些内容,我很乐意了解。)
我认为XmlConvert拥有将常见的运行时类型和XML类型之间进行转换的全部方法。特别是XmlConvert.ToBoolean
正好处理布尔值(有效字符串为"1"或"true"表示真,"0"或"false"表示假)。
CBool
替代Boolean.Parse
应该可以解决问题:尽管你必须将它嵌入到一个try/catch
块中(使用Boolean.TryParse
不需要这样),但它可以成功转换大多数“合理”的布尔值,包括true/false和0/1。CBool
是VB-ism。它映射到Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean
,不适合一般消费。这使得在被接受的答案中指出的XMLConvert类成为更好的选择。在尝试解析数据之前对其进行清理:
string InnerText = yourXmlNode.InnerText;
if (InnerText.Equals("0"))
InnerText = "false";
else if (InnerText.Equals("1"))
InnerText = "true";
除了true、false、0或1之外的任何输入都会引发“格式错误”异常(这是应该的)。
return value === 'true' || Number(value)