У меня есть несколько глубокая структура 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, затем сериализую его в текст, а затем десериализую в Hashtable.
Есть ли способ конвертировать JObject непосредственно в Hashtable или сделать структуры, глубоко вложенные в текст json, такие как "result", в Hashtable для начала? Вышеуказанный подход работает, но я ненавижу его грубость.