声明为xs:boolean的XML属性可以接受为“true”,“false”,“0”或“1”。但是,在.NET中,Boolean.Parse()只接受“true”或“false”。如果它看到“0”或“1”,则会抛出“Bad Format”异常。
那么,鉴于此,将这样的值解析为布尔值的最佳方法是什么?
(不幸的是,我只限于.NET 2.0解决方案,但如果v3.5提供了一些东西,我很乐意听到它。)
答案 0 :(得分:35)
我认为XmlConvert具有在公共语言运行时类型和XML类型之间进行转换的所有方法。特别是XmlConvert.ToBoolean
完全处理布尔值(有效字符串为“1”或“true”表示true,“0”或“false”表示false)。
答案 1 :(得分:2)
使用CBool
代替Boolean.Parse
应该可以解决问题:尽管您必须将其嵌入try/catch
块中(使用{{1}时不需要) }),它将成功转换大多数“合理的”布尔值,包括true / false和0/1。
编辑:正如评论中所指出的,这个答案对于C#程序员来说是没用的,因为Boolean.TryParse
是一个VB主义。它映射到CBool
,这不适合一般消费。这使得XMLConvert类在接受的答案中指出了更好的选择。
答案 2 :(得分:0)
在尝试解析数据之前清理数据:
string InnerText = yourXmlNode.InnerText;
if (InnerText.Equals("0"))
InnerText = "false";
else if (InnerText.Equals("1"))
InnerText = "true";
除 true , false , 0 或 1 之外的任何其他条目仍会抛出“错误格式”例外(应该是)。
答案 3 :(得分:0)
return value === 'true' || Number(value)