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?

Antworten:


298

JObjectdefiniert Methode Parsedafür:

JObject json = JObject.Parse(str);

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


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)

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

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


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

1

Das funktioniert bei mir mit JsonConvert

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

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"
              }
            ]
          }
        ]
      }
    ]
  }
}

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.