Xml正在将动态字符串序列化为布尔值

本文关键字:序列化 布尔值 字符串 动态 Xml | 更新日期: 2023-09-27 18:00:51

下面是一个简单作业调度程序的实例,它将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行抛出一个异常:

  1. 无法使用XMLConvert.ToBoolean 将字符串转换为布尔值

  2. 无法使用Convert.ToBoolean 识别字符串

在这种情况下可能有其他类型的转换吗?预期结果应该是:

JSON

[
    {
        "Name": "facebook",
        "Active": false
    }
]

Xml正在将动态字符串序列化为布尔值

是的,"0"不是布尔值的有效值。听起来你可能想要这样的东西:
List<NavigationData> nds = new List<NavigationData>();
foreach (dynamic cnav in (IEnumerable)c.Navigations)
{
    NavigationData nd = new NavigationData();
    nd.Name = cnav.Name;
    nd.Active = cnav.Active != "0";
    nds.Add(nd);
}
transitContent.NavigationData = JsonConvert.SerializeObject(nds);

这是假设cnav将所有属性公开为字符串(作为它们的执行时间类型(。