Deserializar una jerarquía de objetos JSON en una jerarquía de Diccionario <cadena, objeto>

estoy dentro.NET para WinRT (C #) y me gustaría deserializar una cadena JSON a unaDictionary<string, object>, donde el valor del diccionario se puede convertir posteriormente al tipo real. La cadena JSON puede contener una jerarquía de objetos y me gustaría tener objetos secundarios enDictionary<string, object> también.

Aquí hay un JSON de muestra que debería poder manejar:

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

Probé con elDataContractJsonSerializer haciendo así:

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

Esto realmente funciona bien para el primer nivel, pero luego"Padre" es solo un objeto que no puede ser lanzado a unaDictionary<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>'

Entonces traté de usarJson.NET Pero los objetos hijos son objetos de sí mismos siendoIDictionary<string, JToken>, lo que me obliga a recorrer toda la jerarquía y convertirlos de nuevo.

¿Alguien sabría cómo resolver este problema usando un serializador existente?

EDITAR

Estoy usandoDictionary<string, object> porque mis objetos varían de una llamada de servidor a otra (por ejemplo, la"Carné de identidad" propiedad podría ser"carné de identidad", * "cust_id" * o"Identificación del cliente" dependiendo de la solicitud) y como mi aplicación no es la única que usa esos servicios, no puedo cambiar eso, al menos por ahora.

Por lo tanto, me pareció incómodo de usarDataContractAttribute yDataMemberAttribute en esta situación. En su lugar, me gustaría almacenar todo en un diccionario genérico y tener una propiedad "Id" con una tipografía fuerte que busque "id", "cust_id" o "customerId" en el diccionario, lo que lo hace transparente para la interfaz de usuario.

Este sistema funciona muy bien con JSON.NET, sin embargo, si alguna vez el servidor devuelve una jerarquía de objetos, los subobjetos se almacenarán como JObjects en mi diccionario en lugar de otro diccionario.

Para resumir, estoy buscando un sistema eficiente para transformar una jerarquía de objetos en una jerarquía deDictionary<string, object> utilizando un serializador JSON disponible en WinRT.

Respuestas a la pregunta(2)

Su respuesta a la pregunta