使用JSON.Net自定义JSON到XML的转换
本文关键字:JSON 转换 XML 自定义 Net 使用 | 更新日期: 2023-09-27 18:28:11
我正在使用带有C#的(Newtonsoft的)JSON.Net库,我想自定义其默认XML转换的单个部分。
例如,如果我想更改数组的XML转换,可以说我有以下JSON字符串:
{
"object":
{
"a":
{
[
"d",
"e",
"f"
]
}
}
}
如果我使用JSON.Net的默认转换器将其转换为XML,我会得到:
<object>
<a>d</a>
<a>e</a>
<a>f</a>
</object>
但是,我希望它转换为:
<object>
<a special:type="array">
<element>d</element>
<element>e</element>
<element>f</element>
</a>
</object>
我能以某种方式采用现有的转换方法并对其进行一些更改吗?
XML和JSON都是基于树的结构,这应该使它们的解析器模块化。因此,我正在寻找一个类,我可以用它来覆盖它的转换函数的精神:
protected override XmlNode ToXmlNode(JsonNode jNode)
{
if (jNode.Type == JsonType.Array)
{
XmlNode xNode = this.XDocument.CreateElement(jNode.Name)
foreach (JsonNode jSub in jNode.Children)
{
var newJSub = jSub.Clone();
newJSub.Name = "element";
xNode.AppendChild(this.ToXmlNode(newJSub));
}
return xNode;
}
else
return base.ToXmlNode(jNode);
}
(我使用的是.Net v2.0)
有人知道什么有用的吗?
XmlNodeConverter
的特殊JsonConverter
来完成从Json到XML的转换,反之亦然。这个转换器看起来并没有很好的可扩展性,但您可以使用XmlNodeConverter
源代码作为起点创建自己的自定义转换器,然后将其插回Json.Net.
XmlDocument doc =
JsonConvert.DeserializeObject<XmlDocument>(json, yourCustomXmlNodeConverter);