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

estou dentro.NET para WinRT (C #) 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> 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 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" é 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 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> porque meus objetos variam de uma chamada de servidor para outra (por exemplo,"Identidade" propriedade pode ser"identidade"* "cust_id" * ou"Identificação do Cliente" 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 eDataMemberAttribute 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> usando um serializador JSON disponível no WinRT.

questionAnswers(2)

yourAnswerToTheQuestion