【发布时间】:2015-07-02 16:14:46
【问题描述】:
下面是一个简单的作业调度器实例,它将 xml 动态字符串解析为 json:
XML
<Navigations>
<Navigation Name="facebook" Active ="0" ></Navigation>
</Navigations>
c#
List<NavigationData> nds = new List<NavigationData>();
foreach (object cnav in (IEnumerable)c.Navigations)
{
NavigationData nd = new NavigationData();
nd.Name = (string)((dynamic)cnav).Name;
nd.Active = XmlConvert.ToBoolean((string)((dynamic)cnav).Active); // 3
nds.Add(nd);
}
transitContent.NavigationData = JsonConvert.SerializeObject(nds);
上面的程序在第 3 行抛出一个异常:
使用
XMLConvert.ToBoolean将字符串转换为布尔值失败无法识别带有
Convert.ToBoolean的字符串
在这种情况下还可以进行其他类型转换吗?预期的结果应该是:
JSON
[
{
"Name": "facebook",
"Active": false
}
]
【问题讨论】:
-
什么在解析 XML?从根本上说,您应该将值转换为
int,然后检查它是否非零,但可能有比您使用的方法更好的方法... -
要检查 null,我有这个:
Active = (n.Attribute("Active") != null) ? n.Attribute("Active").Value : string.Empty -
那么您希望将缺失的属性视为活动还是非活动?您可能想将我的答案中的检查更改为“cnav.Active == "1"`