JSON にシリアル化する必要がある XML ドキュメントがあります。handlebars.js が「each」式で失敗するまで、すべてが機能していました (またはそう思っていました)。問題を、JSON.NET を使用した xml > json 変換に絞り込みました。複数の子を持つことがある要素は、json への変換時に (配列ではなく) 単一の要素としてレンダリングされます。ドキュメントには、常に配列としてレンダリングするために、ノードに属性を追加する必要があると記載されています (json:Array="true") (これにより、ハンドルバーが壊れなくなります)。
最初に、名前空間を XML ドキュメント ( http://james.newtonking.com/projects/json ) に追加します。
次に、各ノードを反復処理してテストし、配列にする必要があるかどうかを確認してから、属性を追加します。
//Pseudo code
foreach(XmlNode node in list)
{
XmlAttribute attr = originalDoc.CreateAttribute(@"json:Array");
if(node.Name == "needsToBeAnArray")
{
node.Attributes.Append(attr);
}
}
次に、ドキュメントをメモリ ストリームに保存し、新しい XmlDocument オブジェクトに再読み込みします。
私が取得している結果のjsonは、次のようになります。
{"@Array":"true","item":[{"subitem":"foo", "subitem2":"foo2"}]}
JSON.NET ドキュメントの私の理解から、配列としてレンダリングする必要があります (この「@Array」は表示されません)。誰もこの問題を経験していますか?