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
}