自動生成された xml がいくつかありますが、xml の一部には複数の行が含まれる場合とそうでない場合があります。その結果、行が 1 つの場合は 1 つの json ノードが返され、複数の行がある場合は json ノードを含む配列が返されます。
XMLは次のようになります
<List>
<Content>
<Row Index="0">
<Title>Testing</Title>
<PercentComplete>0</PercentComplete>
<DueDate/>
<StartDate/>
</Row>
</Content>
</List>
または複数の行で
<List>
<Content>
<Row Index="0">
<Title>Update Documentation</Title>
<PercentComplete>0.5</PercentComplete>
<DueDate>2013-01-31 00:00:00</DueDate>
<StartDate>2013-01-01 00:00:00</StartDate>
</Row>
<Row Index="1">
<Title>Write jQuery example</Title>
<PercentComplete>0.05</PercentComplete>
<DueDate>2013-06-30 00:00:00</DueDate>
<StartDate>2013-01-02 00:00:00</StartDate>
</Row>
</Content>
</List>
を使用してこれらを JSON にシリアライズする場合
JsonConvert.SerializeXmlNode(xmldoc, Formatting.Indented);
最初のxmlはこれになります
{
"List": {
"Content": {
"Row": {
"@Index": "0",
"Title": "Testing",
"PercentComplete": "0",
"DueDate": null,
"StartDate": null
}
}
}
}
そして2つ目はこれ
{
"List": {
"Content": {
"Row": [{
"@Index": "0",
"Title": "Update Documentation",
"PercentComplete": "0.5",
"DueDate": "2013-01-31 00:00:00",
"StartDate": "2013-01-01 00:00:00"
}, {
"@Index": "1",
"Title": "Write jQuery example",
"PercentComplete": "0.05",
"DueDate": "2013-06-30 00:00:00",
"StartDate": "2013-01-02 00:00:00"
}]
}
}
}
明らかにわかるように、2 番目の行は本来あるべき配列ですが、最初の行ではありません。この種の問題に対する既知の回避策はありますか、または JSON を受信するフロントエンドにチェックを実装する必要がありますか (構造が非常に動的であるため、これは少し問題になります)。最良の方法は、json.net が常に配列を返すように強制する方法がある場合です。