Mengonversi String JSON ke Objek JSON c #

161

Saya menyimpan String ini di basis data saya:

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

String ini sudah dalam format JSON tetapi saya ingin mengonversinya menjadi Objek JObject atau JSON.

JObject json = new JObject();

Saya mencoba para json = (JObject)str;pemain tetapi tidak berhasil jadi bagaimana saya bisa melakukannya?

caj
sumber

Jawaban:

298

JObjectmendefinisikan metode Parseuntuk ini:

JObject json = JObject.Parse(str);

Anda mungkin ingin merujuk ke dokumentasi Json.NET .

Andrei
sumber
5
Ini akan dikonversi menjadi {string}, akan menambahkan kurung keriting tambahan ke string Anda.
Vasil Valchev
62

jika Anda tidak ingin atau memerlukan objek yang diketik coba:

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

atau coba untuk objek yang diketik coba:

Foo json  = JsonConvert.DeserializeObject<Foo>(str)
Kieran
sumber
Ini juga akan berfungsi dengan daftar T jika string json yang masuk berisi koleksi: Daftar <Foo> json = JsonConvert.DeserializeObject <List <Foo>> (str)
A. Varma
22

Ini bekerja

    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
sumber
namespace untuk 'JavaScriptSerializer': System.Web.Script.Serialization;
BernieSF
Pasti bekerja untuk saya. Menggunakan JObject setelah mengganti penawaran ganda untuk penawaran tunggal, berhasil. Terima kasih!!!
Carlos Parra
System.Web.Script.Serialisasi hanya tersedia dalam kerangka penuh .Net.
norgie
7

ada cara yang menarik untuk mencapai tujuan lain yaitu memiliki basis kelas tipe json yang kuat dengan alat yang sangat kuat yang saya gunakan beberapa hari yang lalu untuk pertama kalinya menerjemahkan hasil jou yang diperdagangkan ke dalam kelas

Adalah alat sederhana: salin tempel sumber json Anda dan dalam beberapa detik Anda akan memiliki orientasi json kelas yang sangat diketik . Dengan cara ini Anda akan menggunakan kelas-kelas ini yang lebih kuat dan mudah digunakan.

Saya harap itu dapat membantu Anda

makemoney2010
sumber
Apa yang saya butuhkan! jadi saya tidak perlu mendefinisikan struktur kelas yang kompleks dari sesuatu yang dibuat dalam javascript
NicolasZ
sementara ini tidak menjawab pertanyaan. ini adalah alat penghemat waktu yang sangat besar.
Valamas
7

Anda dapat mencoba seperti berikut:

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

Ini berfungsi untuk saya gunakan JsonConvert

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

Ini tidak berfungsi jika JObject ini berfungsi untuk data format json sederhana. Saya telah mencoba data saya dari data format json di bawah ini untuk deserialize dalam jenis tetapi tidak mendapatkan respons.

Untuk Json ini

{
  "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
sumber
0

Jika string JSon Anda "" memiliki kuotasi ganda, bukan kuotasi tunggal 'dan memiliki \ n sebagai indikator dari baris berikutnya, maka Anda perlu menghapusnya karena itu bukan string JSon yang tepat, contoh seperti yang ditunjukkan di bawah ini:

            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);
Ketenangan Senyap
sumber