Konvertieren Sie den JSON-String in das JSON-Objekt c #

161

Ich habe diesen String in meiner Datenbank gespeichert:

str = "{ "context_name": { "lower_bound": "value", "upper_bound": "value", "values": [ "value1", "valueN" ] } }"

Diese Zeichenfolge liegt bereits im JSON-Format vor, ich möchte sie jedoch in ein JObject- oder JSON-Objekt konvertieren.

JObject json = new JObject();

Ich habe die json = (JObject)str;Besetzung ausprobiert , aber es hat nicht funktioniert. Wie kann ich das machen?

caj
quelle

Antworten:

298

JObjectdefiniert Methode Parsedafür:

JObject json = JObject.Parse(str);

Möglicherweise möchten Sie auf die Json.NET- Dokumentation verweisen .

Andrei
quelle
5
Dies wird in {string} konvertiert und fügt Ihrem String zusätzliche geschweifte Klammern hinzu.
Vasil Valchev
62

Wenn Sie kein typisiertes Objekt möchten oder benötigen, versuchen Sie Folgendes:

using Newtonsoft.Json;
// ...   
dynamic json  = JsonConvert.DeserializeObject(str);

oder versuchen Sie es mit einem typisierten Objekt. Versuchen Sie:

Foo json  = JsonConvert.DeserializeObject<Foo>(str)
Kieran
quelle
Dies funktioniert auch mit der Liste von T, wenn die eingehende JSON-Zeichenfolge eine Sammlung enthält: List <Foo> json = JsonConvert.DeserializeObject <List <Foo>> (str)
A. Varma
22

Das funktioniert

    string str = "{ 'context_name': { 'lower_bound': 'value', 'pper_bound': 'value', 'values': [ 'value1', 'valueN' ] } }";
    JavaScriptSerializer j = new JavaScriptSerializer();
    object a = j.Deserialize(str, typeof(object));
Karthik Ganesan
quelle
Namespace für 'JavaScriptSerializer': System.Web.Script.Serialization;
BernieSF
Auf jeden Fall für mich gearbeitet. Die Verwendung von JObject nach dem Ersetzen von doppelten Anführungszeichen für einfache Anführungszeichen hat den Trick getan. Vielen Dank!!!
Carlos Parra
System.Web.Script.Serialization ist nur im vollständigen .Net-Framework verfügbar.
Norgie
7

Es gibt einen interessanten Weg, um ein weiteres Ziel zu erreichen, nämlich eine stark typisierte Klassenbasis auf json mit einem sehr leistungsfähigen Werkzeug zu haben, das ich vor einigen Tagen zum ersten Mal verwendet habe, um das Ergebnis von tradedoubler json in Klassen zu übersetzen

Ist ein einfaches Werkzeug: Kopieren Sie Ihre json-Quellpaste und in wenigen Sekunden haben Sie eine stark typisierte Klasse json-orientiert . Auf diese Weise verwenden Sie diese Klassen, die leistungsfähiger und einfach zu verwenden sind.

Ich hoffe das kann dir helfen

makemoney2010
quelle
Genau das, was ich brauchte! Ich muss also keine komplexe Klassenstruktur aus etwas definieren, das in Javascript erstellt wurde
NicolasZ
während dies die Frage nicht beantwortet. Dies ist ein massives zeitsparendes Werkzeug.
Valamas
7

Sie können Folgendes versuchen:

string output = JsonConvert.SerializeObject(jsonStr);
B.Mohamed Riyas
quelle
1

Das funktioniert bei mir mit JsonConvert

var result = JsonConvert.DeserializeObject<Class>(responseString);
HamidKhan
quelle
0

Dies funktioniert im Fall von JObject nicht. Dies funktioniert für die einfachen Daten im JSON-Format. Ich habe versucht, meine Daten im folgenden JSON-Format im Typ zu deserialisieren, habe aber keine Antwort erhalten.

Für diesen Json

{
  "Customer": {
    "id": "Shell",
    "Installations": [
      {
        "id": "Shell.Bangalore",
        "Stations": [
          {
            "id": "Shell.Bangalore.BTM",
            "Pumps": [
              {
                "id": "Shell.Bangalore.BTM.pump1"
              },
              {
                "id": "Shell.Bangalore.BTM.pump2"
              },
              {
                "id": "Shell.Bangalore.BTM.pump3"
              }
            ]
          },
          {
            "id": "Shell.Bangalore.Madiwala",
            "Pumps": [
              {
                "id": "Shell.Bangalore.Madiwala.pump4"
              },
              {
                "id": "Shell.Bangalore.Madiwala.pump5"
              }
            ]
          }
        ]
      }
    ]
  }
}
Rahul Shukla
quelle
0

Wenn Ihre JSon-Zeichenfolge ein doppeltes Anführungszeichen anstelle eines einfachen Anführungszeichens und \ n als Indikator für eine nächste Zeile enthält, müssen Sie sie entfernen, da dies keine richtige JSon-Zeichenfolge ist. Beispiel wie unten gezeigt:

            SomeClass dna = new SomeClass ();
            string response = wc.DownloadString(url);
            string strRemSlash = response.Replace("\"", "\'");
            string strRemNline = strRemSlash.Replace("\n", " ");
            // Time to desrialize it to convert it into an object class.
            dna = JsonConvert.DeserializeObject<SomeClass>(@strRemNline);
Stille Gelassenheit
quelle