Deserialisieren einer JSON-Objekthierarchie in eine Hierarchie von Dictionary <string, object>

ich bin dabei.NET für WinRT (C #) und ich möchte einen JSON-String zu einem deserialisierenDictionary<string, object>, wo der Wörterbuchwert später in den tatsächlichen Typ konvertiert werden kann. Die JSON-Zeichenfolge kann eine Objekthierarchie enthalten und ich möchte untergeordnete Objekte habenDictionary<string, object> auch.

Hier ist ein Beispiel für JSON, das es handhaben sollte:

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

Ich habe es mit dem versuchtDataContractJsonSerializer so machen:

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

Dies funktioniert tatsächlich gut für die erste Ebene, aber dann"Elternteil" ist nur ein Objekt, das nicht in eineDictionary<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>'

Ich habe dann versucht mitJson.NET aber untergeordnete Objekte sind JObject selbstIDictionary<string, JToken>Dies zwingt mich, die gesamte Hierarchie zu durchlaufen und sie erneut zu konvertieren.

Würde jemand wissen, wie man dieses Problem mit einem vorhandenen Serializer löst?

BEARBEITEN

Ich benutzeDictionary<string, object> da sich meine Objekte von einem Serveraufruf zum anderen unterscheiden (z. B. der"Ich würde" Eigentum könnte sein"Ich würde", * "cust_id" * oder"Kundennummer" abhängig von der Anfrage) und da meine App nicht die einzige App ist, die diese Dienste nutzt, kann ich das zumindest vorerst nicht ändern.

Daher fand ich es unbequem zu bedienenDataContractAttribute undDataMemberAttribute in dieser Situation. Stattdessen möchte ich alles in einem generischen Wörterbuch speichern und eine einzige stark typisierte Eigenschaft "Id" haben, die im Wörterbuch nach "id", "cust_id" oder "customerId" sucht und diese für die Benutzeroberfläche transparent macht.

Dieses System funktioniert hervorragend mit JSON.NET. Wenn jedoch der Server eine Objekthierarchie zurückgibt, werden Unterobjekte als JObjects in meinem Wörterbuch anstelle eines anderen Wörterbuchs gespeichert.

Zusammenfassend suche ich ein effizientes System, um eine Objekthierarchie in eine Hierarchie von umzuwandelnDictionary<string, object> Verwendung eines in WinRT verfügbaren JSON-Serializers.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage