Konwertuj ciąg JSON na obiekt JSON C #

161

Mam ten ciąg przechowywany w mojej bazie danych:

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

Ten ciąg jest już w formacie JSON, ale chcę go przekonwertować na obiekt JObject lub JSON.

JObject json = new JObject();

Próbowałem json = (JObject)str;obsady, ale nie działało, więc jak mam to zrobić?

caj
źródło

Odpowiedzi:

298

JObjectokreśla metodę Parsetego:

JObject json = JObject.Parse(str);

Warto zapoznać się z dokumentacją Json.NET .

Andrei
źródło
5
Spowoduje to konwersję do {string}, doda dodatkowe nawiasy klamrowe do twojego ciągu.
Vasil Valchev
62

jeśli nie chcesz lub potrzebujesz wpisanego obiektu, spróbuj:

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

lub wypróbuj wpisany obiekt spróbuj:

Foo json  = JsonConvert.DeserializeObject<Foo>(str)
Kieran
źródło
Będzie to również działać z listą T, jeśli przychodzący ciąg json zawiera kolekcję: List <Foo> json = JsonConvert.DeserializeObject <List <Foo>> (str)
A. Varma
22

To działa

    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
źródło
przestrzeń nazw dla „JavaScriptSerializer”: System.Web.Script.Serialization;
BernieSF
Zdecydowanie pracował dla mnie. Użycie JObject po zamianie podwójnych cudzysłowów na pojedyncze cudzysłowy załatwiło sprawę. Dzięki!!!
Carlos Parra
System.Web.Script.Serialization jest dostępny tylko w pełnej strukturze .Net.
norgie
7

istnieje ciekawy sposób na osiągnięcie innego celu, którym jest posiadanie silnie typowej bazy klas na json z bardzo potężnymi narzędziami, których użyłem kilka dni temu po raz pierwszy do przetłumaczenia wyniku json tradedoubler na klasy

To proste narzędzie: skopiuj wklej swoje źródło json, a za kilka sekund będziesz miał silnie wpisaną klasę zorientowaną na json . W ten sposób użyjesz tych klas, które są potężniejsze i prostsze w użyciu.

Mam nadzieję, że to ci pomoże

makemoney2010
źródło
Dokładnie to, czego potrzebowałem! więc nie muszę definiować złożonej struktury klas z czegoś utworzonego w javascript
NicolasZ
podczas gdy to nie odpowiada na pytanie. jest to ogromne narzędzie oszczędzające czas.
Valamas
7

Możesz spróbować następujących:

string output = JsonConvert.SerializeObject(jsonStr);
B.Mohamed Riyas
źródło
1

To działa dla mnie przy użyciu JsonConvert

var result = JsonConvert.DeserializeObject<Class>(responseString);
HamidKhan
źródło
0

To nie działa w przypadku JObject, działa to dla prostych danych w formacie json. Próbowałem moich danych z poniższych danych w formacie json do deserializacji w typie, ale nie otrzymałem odpowiedzi.

W tym przypadku 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
źródło
0

Jeśli Twój ciąg JSon zawiera „” podwójny cudzysłów zamiast pojedynczego cudzysłowu ”i ma \ n jako wskaźnik następnej linii, musisz go usunąć, ponieważ nie jest to właściwy ciąg JSon, przykład jak pokazano poniżej:

            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);
Cichy spokój
źródło