以下のようなやや深いJson構造があり、ワイヤーを介してC#アプリケーションに着信します::
[
{
"status": "ok",
"node": "vm2",
"type": "message",
"result": {
"tx.mqid": "amq.gen-+Phq5acfC9kbs7Ch/0cUUw==",
"tx.time": 1297273910,
"tx.id": 28
}
}
...
]
私はこのような逆シリアル化を行っています:
List<Hashtable> des = JsonConvert.DeserializeObject<List<Hashtable>>(objs);
ここで、上記の構造から「結果」辞書を抽出する必要があります。
それを行うことの問題は、それが常にそこにあるとは限らないということです。特に何か他のものに置き換えることができます。エラーが発生したとき。また、Json クライアントから呼び出された関数によって結果が変わる場合があります。したがって、次のような静的な方法で実際に指定することはできません。
JsonConvert.DeserializeObject<List<Hashtable<Hashtable>>>
今のところ、次のように、やや骨の折れる方法で逆シリアル化を行っています。
JObject nodeResult = (JObject)nodeRec["result"];
Hashtable nrh = JsonConvert.DeserializeObject<Hashtable>(nodeResult.ToString());
つまり、「結果」を JObject にデシリアライズし、それをテキストにシリアライズしてから、ハッシュテーブルにデシリアライズしています。
JObject を直接 Hashtable に変換する方法、または「結果」のような構造を JSON テキストに深くネストして Hashtable にする方法はありますか? 上記のアプローチは機能しますが、私はそのぎこちなさが嫌いです。