gpt4 book ai didi

c# - 强制 JsonConvert.SerializeXmlNode 将节点值序列化为整数或 bool 值

转载 作者:太空狗 更新时间:2023-10-29 18:18:28 24 4
gpt4 key购买 nike

Newtonsoft.Json.JsonConvert 类中的SerializeXmlNode 函数在序列化过程中始终将 XML 最后一个子节点的值输出为字符串类型,有时您可能需要将它们序列化为整数或 bool 值。

示例代码:

<Object>
<ID>12</ID>
<Title>mytitle</Title>
<Visible>false</Visible>
</Object>

输出:

{ "ID" : "12",
"Title" : "mytitle",
"Visible" : "false"
}

期望的输出:

{ "ID" : 12,
"Title" : "mytitle",
"Visible" : false
}

有没有办法强制将 XML 节点序列化为整数或 bool 值?

谢谢。

注意:请避免在 XML 已序列化为 JSON 字符串时发布解决方法,因为这些解决方法是我们愿意避免的。

最佳答案

JSON.NET 不是用于 XML 序列化的工具。它对 XML 节点的序列化旨在提供 XML 和 JSON 之间的一对一对应关系。由于 XML 中的属性只能是字符串类型,因此在序列化过程中不会保留类型信息。反序列化回 JSON 时将无用。

如果您需要将 XML 转换为 JSON,我建议使用同时支持 XML 和 JSON 序列化的 DTO 类。

[XmlRoot ("Object"), JsonObject]
public class Root
{
[XmlElement, JsonProperty]
public int Id { get; set; }

[XmlElement, JsonProperty]
public string Title { get; set; }

[XmlElement, JsonProperty]
public bool Visible { get; set; }
}

从 XML 反序列化,然后序列化为 JSON:

public class Program
{
private const string xml = @"
<Object>
<Id>12</Id>
<Title>mytitle</Title>
<Visible>false</Visible>
</Object>";

private static void Main ()
{
var serializer = new XmlSerializer(typeof(Root));
var root = (Root)serializer.Deserialize(new StringReader(xml));
Console.WriteLine(JsonConvert.SerializeObject(root, Formatting.Indented));
Console.ReadKey();
}
}

输出:

{
"Id": 12,
"Title": "mytitle",
"Visible": false
}

关于c# - 强制 JsonConvert.SerializeXmlNode 将节点值序列化为整数或 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18611139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com