Глубоко вложенный Json в статический тип с рекурсивным использованием пользовательского типа

Я получаю следующий пример сообщения Json, которое может быть глубоко вложенным. Насколько глубоко, заранее неизвестно.

{
  "body": {
    "blmRequest": {
      "events": [
        {
          "event": "Login",
          "params": [
            {
              "key": "pin",
              "value": "xxxx"
            },
            {
              "key": "version",
              "value": "xxxxxx"
            },
            {
              "key": "NFC",
              "value": "x"
            }
          ]
        },
        {
          "event": "TCD_Recargaxxxx",
          "params": [
            {
              "key": "amt",
              "value": "xx"
            },
            {
              "key": "cel",
              "value": "xxxx"
            },
            {
              "key": "pin",
              "value": "xxxx"
            },
            {
              "key": "version",
              "value": "xxxxxx"
            },
            {
              "key": "NFC",
              "value": "x"
            }
          ]
        }
      ]
    }
  }
}

Я хочу десериализовать Json в свой класс. которые работают как своего рода корневой объект:

public class Response
{
    public OrderedDictionary<string, object> body { get; set; }
}

Класс OrderedDictionary<string,object> — это настраиваемый словарь, который я хотел бы использовать для всех объектов Json, найденных во время обхода глубокой иерархии. Стандартный класс List<object> я хотел бы использовать для всех массивов Json, которые будут найдены во время обхода иерархии. Все остальные типы Simple должны быть сохранены как простые объекты.

К сожалению, Json.Net сдается после одного уровня в глубину и возвращает в качестве значения Словаря иерархию JObject.

Я также не могу использовать ExpandoObject в качестве значения OrderedDictionary.

Что и как я могу перезаписать в Json.Net, чтобы мой сценарий работал. Я хотел бы использовать только возможности расширения Json.Net.


person rudimenter    schedule 17.02.2015    source источник
comment
Можете ли вы более конкретно указать, какие данные вы хотите получить, и несколько примеров того, как данные могут различаться?   -  person JohnD    schedule 17.02.2015
comment
@JohnD Вопрос в основном объясняет все. Это может быть объект неизвестной глубины. Объекты Json должны стать OrderedDictionary‹string,object›, а массивы Json должны стать List‹object›. Вы видите класс Response в моем описании, и это все, что у меня есть.   -  person rudimenter    schedule 18.02.2015