Десериализация иерархии объектов JSON в иерархию словаря <строка, объект>

Я в.NET для WinRT (C #) и я хотел бы десериализовать строку JSON вDictionary<string, object>где значение словаря может быть позже преобразовано в фактический тип. Строка JSON может содержать иерархию объектов, и я хотел бы иметь дочерние объекты вDictionary<string, object> также.

Вот пример JSON, который он должен уметь обрабатывать:

{
  "Name":"John Smith",
  "Age":42,
  "Parent":
  {
    "Name":"Brian Smith",
    "Age":65,
    "Parent":
    {
       "Name":"James Smith",
       "Age":87,
    }
  }
}

Я пробовал сDataContractJsonSerializer делать так:

using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
    DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
    settings.UseSimpleDictionaryFormat = true;

    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Dictionary<string, object>), settings);
    Dictionary<string, object> results = (Dictionary<string, object>)serializer.ReadObject(ms);
}

Это на самом деле хорошо работает для первого уровня, но потом«Родитель» это просто объект, который не может быть приведен кDictionary<string, object>:

Dictionary<string, object> parent = (Dictionary<string, object>)results["Parent"];
Cannot cast 'results["Parent"]' (which has an actual type of 'object') to 'System.Collections.Generic.Dictionary<string,object>'

Затем я попытался с помощьюJson.NET но дочерние объекты являютсяIDictionary<string, JToken>, что заставляет меня перебирать всю иерархию и преобразовывать их снова.

Кто-нибудь знает, как решить эту проблему, используя существующий сериализатор?

РЕДАКТИРОВАТЬ

я используюDictionary<string, object> потому что мои объекты меняются от одного вызова сервера к другому (например,"Я бы" собственность может быть"Я бы", * "cust_id" * или"Пользовательский ИД" в зависимости от запроса), и поскольку мое приложение не единственное, использующее эти сервисы, я не могу это изменить, по крайней мере сейчас.

Поэтому мне было неудобно пользоватьсяDataContractAttribute а такжеDataMemberAttribute в этой ситуации. Вместо этого я хотел бы хранить все в универсальном словаре и иметь одно строго типизированное свойство «Id», которое ищет в словаре «id», «cust_id» или «customerId», делая его прозрачным для пользовательского интерфейса.

Эта система прекрасно работает с JSON.NET, однако, если сервер возвращает иерархию объектов, подобъекты будут храниться в моем словаре как JObjects вместо другого словаря.

Подводя итог, я ищу эффективную систему для преобразования иерархии объектов в иерархиюDictionary<string, object> используя сериализатор JSON, доступный в WinRT.

Ответы на вопрос(2)

Ваш ответ на вопрос