5

(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を使用しています)

誰かが助けることができる何かを知っていますか?

4

1 に答える 1

0

内部的に、Json.Net は特別なJsonConverter呼び出しXmlNodeConverterを使用して、JSON から XML へ、またはその逆の変換を行います。このコンバーターはそのままではあまり拡張可能ではないようですが、XmlNodeConverterソース コードを出発点として使用して独自のカスタム コンバーターを作成し、それを Json.Net にプラグインすることができます。

XmlDocument doc = 
    JsonConvert.DeserializeObject<XmlDocument>(json, yourCustomXmlNodeConverter);
于 2014-04-25T17:00:40.783 に答える