Json.NET serialisieren/ Deserialisieren von verschachtelten dictionaries

Ich habe getan, einige der Forschung zu diesem Thema, und andere als die änderung der meinem Wörterbuch, eine Sammlung von KeyValuePair Gegenstände, die ich nicht in der Lage gewesen zu finden, keine Lösung für folgenden Fall.

Habe ich ein sehr einfaches Modell, das sogenannte Client, der hat ein Wörterbuch als eine von Eigenschaften und schließlich bin ich versucht zu serialisieren und Deserialisieren Wörterbuch-Modell.

Hier ist mein code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;

namespace Automation
{
public class Client
{
    public Client(IList<String> environments)
    {
        this.Environments = new Dictionary<String, Boolean>();
        if (environments != null)
            foreach (String environment in environments)
                this.Environments[environment] = false;
    }

    public Dictionary<String, Boolean> Environments { get; set; }
}

public static class TestClass
{
    public static void Serializer()
    {
        Dictionary<String, Client> newDict = new Dictionary<String, Client>();
        newDict[Guid.NewGuid().ToString()] = new Client(new List<String>() { "A", "B" });
        newDict[Guid.NewGuid().ToString()] = new Client(new List<String>() { "A", "B" });
        newDict[Guid.NewGuid().ToString()] = new Client(new List<String>() { "A", "B" });

        string json = JsonConvert.SerializeObject(newDict, Formatting.Indented);
        try
        {
            Dictionary<String, Client> obj = JsonConvert.DeserializeObject<Dictionary<String, Client>>(json);
        }
        catch
        {
        }
    }
}

}

dies ist json, die generiert wird:

{
"246af598-89b3-4198-b2cb-9f2d8fe6e03e": {
"Environments": {
  "A": false,
  "B": false
  }
},
"fc43bb8d-65d3-4a97-86f3-cb67567845bd": {
"Environments": {
  "A": false,
  "B": false
   }
},
"90c0158a-69e2-42b0-9072-e695c94a2f7a": {
"Environments": {
  "A": false,
  "B": false
   }
 }
}

und hier ist die Ausnahme, ich bin immer, wenn Sie versuchen zu Deserialisieren:

Kann nicht deserialisiert werden die aktuellen JSON-Objekt (z.B. {"name":"Wert"}) in Typ " System.Sammlungen.Generisches.IList`1[System.String]", denn die Art benötigt ein JSON-array (z.B. [1,2,3]) Deserialisieren korrekt.
Um diesen Fehler zu beheben, ändern den JSON zu JSON-array (z.B. [1,2,3]) oder ändern Sie die Deserialisierung-Typ, so dass es ein normales .NET-Typ (z.B. nicht in einen primitiven Typ wie die Ganzzahl, keine Auflistung geben, wie ein array oder eine Liste), die deserialisiert werden von einem JSON-Objekt. JsonObjectAttribute können ebenfalls Hinzugefügt werden, um den Typ zu erzwingen, es zu Deserialisieren von einem JSON-Objekt.
Pfad '246af598-89b3-4198-b2cb-9f2d8fe6e03e.- Umgebungen.A", Zeile 4, position 11.

Alle Gedanken, irgendwann werde ich das senden dieses Objekt serialisiert über die Leitung via SignalR Anfrage.

Danke

InformationsquelleAutor Paul | 2013-11-27

Schreibe einen Kommentar