2017-08-28 4 views
0

Ich bin kein C# -Programmierer, sondern spiele von Zeit zu Zeit mit der Sprache. Ich frage mich, ob ich eine JSON-Zeichenfolge habe, die ich mit JavaScriptSerializer.DeserializeObject deserialisieren möchte, wie könnte ich das tun. Zum Beispiel, wenn ich eine JSON:C# JSON mit JavaScriptSerializer.DeserializeObject deserialisieren

{ 
    "Name": "col_name2", 
    "Value": [ 
     { 
      "From": 100, 
      "To": 200 
     }, 
     { 
      "From": 100, 
      "To": 200 
     } 
    ] 
} 

Und ich habe die JSON-String in einer Variablen sJson genannt:

using System.Web.Script.Serialization; 
... 

JavaScriptSerializer jss = new JavaScriptSerializer(); 
Object json = jss.DeserializeObject(sJson); 

und jetzt, wie verwende ich diese Object json Variable?

Hinweis: Ich weiß bereits, wie man es unter Verwendung System.Web.Script.Serialization.Deserialize<T> Methode tut.

+0

Das Ergebnis in diesem Fall ist ein 'Dictionary ', wobei der Schlüssel für ein Element '' Name '' mit einem Wert von '' col_name2 '', ein anderes mit '" Value "' ist mit einem Wert von 'object []', die zwei Objekte innerhalb des json-Arrays. Sie sollten einige Klassen zum Deserialisieren erstellen, die Ihr Leben erleichtern. –

+0

Danke. In der Tat funktioniert es wie du sagst, die einzige Sache ist, dass anstelle von Object json ich dynamische json = jss.DeserializeObject (sJson) verwenden muss; und das hielt mich auf. – vivanov

Antwort

1

Schauen Sie sich thi s Beitrag für Davids Antwort:

Deserialize json object into dynamic object using Json.net

Sie können es in eine dynamische setzen (zugrunde liegenden Typ ist JObject) Dann können Sie als die Informationen wie folgt zugreifen:

JavaScriptSerializer jss = new JavaScriptSerializer(); 
dynamic json = jss.DeserializeObject(sJson); 
Console.WriteLine(json["Name"]); // use as Dictionary 

würde ich es vorziehen erstellen Ein Datenübertragungsobjekt (DTO) repräsentiert Ihre JSON-Struktur als aC# -Klasse.

+0

Wo verwenden Sie Json.Net in Ihrem Codebeispiel? –

+0

Es kompiliert, aber zur Laufzeit wirft es eine Ausnahme: 'System.Collections.Generic.Dictionary ' nicht cont in einer Definition für 'Name'. – vivanov

+0

Ok, ich habe es herausgefunden: Ich muss es so nennen: Console.WriteLine (json ["Name"]); – vivanov

0

Sie könnten neue benutzerdefinierte Klassen für diesen speziellen Fall erklären:

public class CustomClass 
{ 
    public string Name { get; set; } 
    public List<ValueClass> Value { get; set; } 
} 

public class ValueClass 
{ 
    public int From { get; set; } 
    public int To { get; set; } 
} 

dann direkt deserialisieren zu diesen Klassen (die Deserializer die korrekten Eigenschaften automatisch Karte):

JavaScriptSerializer jss = new JavaScriptSerializer(); 
CustomClass json = (CustomClass)jss.Deserialize(sJson, typeof(CustomClass)); 

Außerdem, wenn Sie mehr als 1 Stück, das ist auch ganz einfach:

List<CustomClass> json = (List<CustomClass>)jss.Deserialize(sJson, typeof(List<CustomClass>)); 
Verwandte Themen