私は JSON.net を試してきましたが、複雑な JSON ファイルがあります。シーケンシャル ループを使用してデータを検索することはできないので、必要なキーを入力して関連オブジェクトを取得できるように、辞書を使用する必要があると考えました。
json をディクショナリに逆シリアル化できましたが、これは最初のノードからのみです。続行する前にまず JSON を表示します (データが非常に多いため、短くしました)。json にエラーがありますが、JSON のアイデアは理解できます。
{
"response": {
"dsCompanyContract": {
"dsCompanyContract": {
"ttEmployee": [
{
"empUID": 467775,
"empNameFirst": "Name1",
"empNameLast": "lastname",
"empFunction": "TECHNICUS AUTOTECHNIEK",
"ttContract": [
{
"UID": 1,
"empUID": 467775,
"refkey": "1_1808630",
"datStart": "2013-05-27",
"datStop": "2013-05-31",
"regime": 1,
"state": "CONTRACTED",
"ttScheduleDay": [
{
"ContractUID": 1,
"dat": "2013-05-27",
"dateTimeStart": "2013-05-27T08:00:00.000",
"dateTimeStop": "2013-05-27T17:00:00.000",
"duration": 8
},
{
"ContractUID": 1,
"dat": "2013-05-28",
"dateTimeStart": "2013-05-28T08:00:00.000",
"dateTimeStop": "2013-05-28T17:00:00.000",
"duration": 8
},
{
"ContractUID": 1,
"dat": "2013-05-29",
"dateTimeStart": "2013-05-29T08:00:00.000",
"dateTimeStop": "2013-05-29T17:00:00.000",
"duration": 8
},
{
"ContractUID": 1,
"dat": "2013-05-30",
"dateTimeStart": "2013-05-30T08:00:00.000",
"dateTimeStop": "2013-05-30T17:00:00.000",
"duration": 8
},
{
"ContractUID": 1,
"dat": "2013-05-31",
"dateTimeStart": "2013-05-31T08:00:00.000",
"dateTimeStop": "2013-05-31T16:00:00.000",
"duration": 7
}
]
}
]
}
]
}
]
}
}
}
}
私が達成したいのは、次の辞書を作成することです。
すべての ttEmployees (キー: empUID)
ttEmployee 内のすべての ttContracts (キー: UID)
ttContracts 内のすべての ttScheduleDays (キー: dat)
私はこれを行うことができましたが、リスト内のすべてのオブジェクトをループしてから、手動でライブラリに追加していました。どうすればこれをより速く行うことができるのだろうかと思っていました。現時点で私は使用しています:
obj = JsonConvert.DeserializeObject<IDictionary<string, Response>>(
newFormatJSON, new JsonConverter[] { new JSONDictionaryConverter() });
これにより、ルート要素の辞書が作成されます。ここから、データのループ処理を開始し、自作の辞書にオブジェクトを追加します。
JSON.netの問題 辞書に変換する方法の例を見つけましたが、複雑なJSONではありません。ディクショナリを作成する前に、まずいくつかのノードをスキップする必要があります。
必要に応じて/要求されたときに更新します。
前もって感謝します。