【问题标题】:Custom JSON to XML conversion using JSON.Net使用 JSON.Net 自定义 JSON 到 XML 的转换
【发布时间】:2013-08-20 17:26:11
【问题描述】:

我正在使用(Newtonsoft 的)JSON.Net 库和 C#,我想自定义其默认 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 类中需要的内容。您可能需要创建自己的 JsonTextWriter 继承者并将其传递给 XmlNodeConverter。

标签: c# xml json json.net converter


【解决方案1】:

在内部,Json.Net 使用称为 XmlNodeConverter 的特殊 JsonConverter 来执行从 JSON 到 XML 的转换,反之亦然。这个转换器似乎不是很可扩展,但您可以使用XmlNodeConverter source code 作为起点创建自己的自定义转换器,然后将其重新插入 Json.Net。

XmlDocument doc = 
    JsonConvert.DeserializeObject<XmlDocument>(json, yourCustomXmlNodeConverter);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多