JSON String'i JSON Object c # 'e dönüştürme


161

Benim veritabanında depolanan bu Dize var:

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

Bu dize zaten JSON biçimindedir, ancak JObject veya JSON Nesnesine dönüştürmek istiyorum.

JObject json = new JObject();

json = (JObject)str;Oyuncu kadrosunu denedim ama işe yaramadı, bu yüzden nasıl yapabilirim?

Yanıtlar:


298

JObjectBunun Parseiçin yöntemi tanımlar :

JObject json = JObject.Parse(str);

Json.NET belgelerine başvurmak isteyebilirsiniz .


5
Bu, {string} biçimine dönüştürülecek, dizenize fazladan süslü parantez ekleyecektir.
Vasil Valchev

62

Yazılan bir nesneye ihtiyacınız yoksa veya ihtiyacınız varsa:

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

veya yazılan bir nesneyi deneyin:

Foo json  = JsonConvert.DeserializeObject<Foo>(str)

Bu, gelen json dizesi bir koleksiyon içeriyorsa T listesi ile de çalışır: List <Foo> json = JsonConvert.DeserializeObject <List <Foo>> (str)
A. Varma

22

Bu çalışıyor

    string str = "{ 'context_name': { 'lower_bound': 'value', 'pper_bound': 'value', 'values': [ 'value1', 'valueN' ] } }";
    JavaScriptSerializer j = new JavaScriptSerializer();
    object a = j.Deserialize(str, typeof(object));

'JavaScriptSerializer' için ad alanı: System.Web.Script.Serialization;
57'de BernieSF

Kesinlikle benim için çalıştı. Tek tırnak için çift tırnak yerine JObject kullanarak, hile yaptı. Teşekkürler!!!
Carlos Parra

System.Web.Script.Serialization yalnızca .Net tam çerçeve içinde kullanılabilir.
norgie

7

tradedoubler json sonucunu sınıflara çevirmek için birkaç gün önce kullandığım çok güçlü araçlarla json üzerinde güçlü bir sınıf temeline sahip olmak için başka bir hedefe ulaşmak için ilginç bir yol var

Basit bir araçtır: json kaynak hamurunuzu kopyalayın ve birkaç saniye içinde güçlü bir şekilde yazılmış bir json sınıfına sahip olacaksınız . Bu şekilde, daha güçlü ve sadece kullanımı kolay olan bu sınıfları kullanacaksınız.

Umarım bu sana yardımcı olabilir


Tam ihtiyacım olan şey! bu yüzden JavaScript'te oluşturulan bir şeyden karmaşık bir sınıf yapısı tanımlamak zorunda
değilsiniz

bu soruya cevap vermiyor. bu devasa bir zaman kazandıran araçtır.
Valamas

7

Aşağıdaki gibi deneyebilirsiniz:

string output = JsonConvert.SerializeObject(jsonStr);

1

Bu benim için çalışıyor JsonConvert

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

0

JObject durumunda bu çalışmaz, bu basit json biçimi verileri için çalışır. Aşağıdaki json biçimindeki verilerimi türünde seriden kaldırmak için denedim ama yanıt alamadım.

Bu Json için

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

JSon dizeniz "" tek tırnak yerine çift tırnak işareti "içeriyorsa ve bir sonraki satırın göstergesi olarak \ n içeriyorsa, bunu kaldırmanız gerekir, çünkü bu, aşağıda gösterildiği gibi uygun bir JSon dizesi değildir:

            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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.