keyr が言うように、問題は数値名を持つ JSON プロパティにあります。XML では、名前に数字を含めることはできますが、先頭をXMLにすることはできません(整形式とエラー処理のセクションを参照してください)。
私のアイデアは、JSON を JSON.Net で再帰的に解析し、数値名を持つプロパティを置き換えることでした。
var jsonObject = JObject.Parse(json);
foreach (var obj in jsonObject)
{
Process(obj.Value);
}
XDocument document = JsonConvert.DeserializeXNode(jsonObject.ToString());
....
private static void Process(JToken jToken)
{
if (jToken.Type == JTokenType.Property)
{
JProperty property = jToken as JProperty;
int value;
if (int.TryParse(property.Name, out value))
{
JToken token = new JProperty("_" + property.Name, property.Value);
jToken.Replace(token);
}
}
if (jToken.HasValues)
{
//foreach won't work here as the call to jToken.Replace(token) above
//results in the collection modifed error.
for(int i = 0; i < jToken.Values().Count(); i++)
{
JToken obj = jToken.Values().ElementAt(i);
Process(obj);
}
}
}
数値名の前に_
. この行で:
XDocument document = JsonConvert.DeserializeXNode(jsonObject.ToString());
無効な/整形式でない XML が作成されたというエラーでクラッシュしました。実際のエラーはありませんが、上記のコードを実行して再現できます。
ここから、そもそも JSON を XML に変換することを再検討する必要があると思います。これは特定の要件ですか?