使用JSON.Net自定义JSON到XML的转换

EZL*_*ner 5 c# xml json converter json.net

我正在使用(Newtonsoft)的JSON.Net库和C#,我想自定义其默认XML转换的一部分.

例如,如果我想更改数组的XML转换,而不是说我有以下JSON字符串:

{
    "object":
    {
        "a": 
        {
            [
                "d",
                "e",
                "f"
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用JSON.Net的默认转换器将其转换为XML,我得到:

<object>
    <a>d</a>
    <a>e</a>
    <a>f</a>
</object>
Run Code Online (Sandbox Code Playgroud)

但是,我希望它转换为:

<object>
    <a special:type="array">
        <element>d</element>
        <element>e</element>
        <element>f</element>
    </a>
</object>
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式采用现有的转换方法并稍微改变一下吗?

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);
}
Run Code Online (Sandbox Code Playgroud)

(我正在使用.Net v2.0)

有谁知道任何有用的东西?

Bri*_*ers 0

在内部,Json.Net 使用特殊的JsonConverter调用XmlNodeConverter来进行 JSON 到 XML 的转换,反之亦然。该转换器似乎不太可扩展,但您可以使用XmlNodeConverter源代码作为起点创建自己的自定义转换器,然后将其插回到 Json.Net 中。

XmlDocument doc = 
    JsonConvert.DeserializeObject<XmlDocument>(json, yourCustomXmlNodeConverter);
Run Code Online (Sandbox Code Playgroud)