Converti stringa JSON in oggetto JSON c #


161

Ho questa stringa memorizzata nel mio database:

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

Questa stringa è già nel formato JSON ma voglio convertirla in un oggetto JObject o JSON.

JObject json = new JObject();

Ho provato il json = (JObject)str;cast ma non ha funzionato, quindi come posso farlo?

Risposte:


298

JObjectdefinisce il metodo Parseper questo:

JObject json = JObject.Parse(str);

Si consiglia di fare riferimento alla documentazione di Json.NET .


5
Questo si convertirà in {stringa}, aggiungerà parentesi graffe extra alla tua stringa.
Vasil Valchev,

62

se non vuoi o non hai bisogno di un oggetto digitato prova:

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

o prova per un oggetto digitato prova:

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

Funzionerà anche con l'elenco di T se la stringa json in arrivo contiene una raccolta: Elenco <Foo> json = JsonConvert.DeserializeObject <Elenco <Foo>> (str)
A. Varma

22

Questo funziona

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

spazio dei nomi per "JavaScriptSerializer": System.Web.Script.Serialization;
BernieSF

Sicuramente ha funzionato per me. L'uso di JObject dopo aver sostituito le doppie virgolette per le virgolette singole, ha funzionato. Grazie!!!
Carlos Parra,

System.Web.Script.Serialization è disponibile solo nel framework completo .Net.
Norgie,

7

c'è un modo interessante per raggiungere un altro obiettivo che è quello di avere una base di classe fortemente tipizzata su json con strumenti molto potenti che ho usato pochi giorni fa per la prima volta per tradurre il risultato json tradedoubler in classi

È uno strumento semplice: copia il tuo incolla sorgente json e in pochi secondi avrai una classe fortemente tipizzata orientata json . In questo modo userete queste classi che sono più potenti e semplicemente da usare.

Spero che ti possa aiutare


Proprio quello di cui avevo bisogno! quindi non devo definire una struttura di classe complessa da qualcosa creato in javascript
NicolasZ

mentre questo non risponde alla domanda. questo è uno strumento di grande risparmio di tempo.
Valamas,


1

Questo funziona per me usando JsonConvert

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

0

Questo non funziona nel caso del JObject funziona per i semplici dati in formato json. Ho provato i miei dati dei seguenti formati json per deserializzare nel tipo ma non ho ottenuto la risposta.

Per questo 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

Se la tua stringa JSon ha "" virgolette doppie invece di una virgoletta singola e ha \ n come indicatore di una riga successiva, devi rimuoverla perché non è una stringa JSon corretta, esempio come mostrato di seguito:

            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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.