860 Stimmen

Wie kann ich JSON in ein einfaches Dictionary<string,string> in ASP.NET deserialisieren?

Ich habe eine einfache Schlüssel/Wert-Liste in JSON, die über POST an ASP.NET zurückgesendet wird. Beispiel:

{ "key1": "value1", "key2": "value2"}

ICH VERSUCHE NICHT, IN STARK GETYPTE .NET-OBJEKTE ZU DESERIALISIEREN

Ich brauche einfach einen einfachen alten Dictionary(Of String, String) oder ein Äquivalent (Hash-Tabelle, Dictionary(Of String, Object), StringDictionary der alten Schule - ein 2-D-Array von Strings würde für mich funktionieren.

Ich kann alles verwenden, was in ASP.NET 3.5 verfügbar ist, ebenso wie das beliebte Json.NET (das ich bereits für die Serialisierung verwende) zu den Kunden).

Offensichtlich keine dieser JSON-Bibliotheken haben diese Stirn schlagen offensichtliche Fähigkeit out of the box--sie sind völlig auf Reflexion-basierte Deserialisierung über starke Verträge konzentriert.

Irgendwelche Ideen?

Beschränkungen:

  1. Ich möchte nicht meinen eigenen JSON-Parser implementieren
  2. ASP.NET 4.0 kann noch nicht verwendet werden
  3. Ich würde es vorziehen, von der älteren, veralteten ASP.NET-Klasse für JSON wegzubleiben.

1 Stimmen

Zu: Einschränkung 3, JavaScriptSerizlizer wird in ASP.NET MVC verwendet und ist nicht mehr veraltet.

37 Stimmen

Es ist unglaublich, wie schwierig es war, einen einfachen Weg zu finden, um eine json-Zeichenfolge in etwas zu konvertieren, das ich leicht verwenden konnte, ohne durch viele verschiedene Stackoverflow zu blättern. Es ist so einfach in anderen Sprachen noch Java und C# scheint zu gehen aus dem Weg zu machen das Leben schwer.

0voto

Gering Punkte 2380

Sie könnten verwenden Tiny-JSON

string json = "{\"key1\":\"value1\", \"key2\":\"value2\"}";
IDictionary<string, string> dict = Tiny.Json.Decode<Dictionary<string, string>>(json);

0voto

Dan Csharpster Punkte 2199

Ich würde vorschlagen, dass Sie System.Runtime.Serialization.Json die Teil von .NET 4.5 ist.

[DataContract]
public class Foo
{
   [DataMember(Name = "data")]
   public Dictionary<string,string> Data { get; set; }
}

Dann verwenden Sie es so:

var serializer = new DataContractJsonSerializer(typeof(List<Foo>));
var jsonParams = @"{""data"": [{""Key"":""foo"",""Value"":""bar""}] }";
var stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonParams));

var obj = serializer.ReadObject(stream);
Console.WriteLine(obj);

0 Stimmen

Wo ist der Serializer definiert?

0 Stimmen

Und was ist ein Category3MeasureModel? Keine Treffer bei Google.

1 Stimmen

Das ist nur die Modellklasse, die ich für mein Projekt serialisiere. Eigentlich sollte es die Klasse Foo sein, aber ich habe den gesamten Abschnitt aus dem Produktionscode kopiert. Sie sollten Ihre eigene Klasse erstellen, wie meine Foo-Klasse. Ich habe sie in Foo umbenannt, um es einfacher zu machen. Es ist nur eine Klasse der Eigenschaften oder Felder, die Sie in json und zurück serialisiert wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X