Desserializando uma hierarquia de objeto JSON em uma hierarquia de Dictionary <string, object>

estou dentro.NET para WinRT (C #)&nbsp;e eu gostaria de desserializar uma string JSON para umDictionary<string, object>, onde o valor do dicionário pode ser posteriormente convertido para o tipo real. A string JSON pode conter uma hierarquia de objetos e gostaria de ter objetos filho emDictionary<string, object>&nbsp;também.

Aqui está um JSON de amostra que deve ser capaz de manipular:

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

Eu tentei com oDataContractJsonSerializer&nbsp;fazendo assim:

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);
}

Isso realmente funciona bem para o primeiro nível, mas depois"Pai"&nbsp;é apenas um objeto que não pode ser lançado em umDictionary<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>'

Eu então tentei usarJson.NET&nbsp;mas objetos filhos são JObject sendo eles mesmosIDictionary<string, JToken>, o que me força a percorrer toda a hierarquia e convertê-los novamente.

Alguém saberia como resolver esse problema usando um serializador existente?

EDITAR

estou a usarDictionary<string, object>&nbsp;porque meus objetos variam de uma chamada de servidor para outra (por exemplo,"Identidade"&nbsp;propriedade pode ser"identidade"* "cust_id" * ou"Identificação do Cliente"&nbsp;dependendo da solicitação) e como meu aplicativo não é o único aplicativo que usa esses serviços, não posso mudar isso, pelo menos por enquanto.

Portanto, achei inconveniente usarDataContractAttribute&nbsp;eDataMemberAttribute&nbsp;nesta situação. Em vez disso, eu gostaria de armazenar tudo em um dicionário genérico e ter uma única propriedade "Id" fortemente tipada que procura "id", "cust_id" ou "customerId" no dicionário, tornando-a transparente para a interface do usuário.

Esse sistema funciona muito bem com o JSON.NET, no entanto, se algum dia o servidor retornar uma hierarquia de objetos, os sub-objetos serão armazenados como JObjects no meu dicionário, em vez de em outro dicionário.

Resumindo, estou procurando um sistema eficiente para transformar uma hierarquia de objetos em uma hierarquia deDictionary<string, object>&nbsp;usando um serializador JSON disponível no WinRT.