Convertir cadena JSON a objeto JSON c #

161

Tengo esta cadena almacenada en mi base de datos:

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

Esta cadena ya está en formato JSON, pero quiero convertirla en un objeto JObject o JSON.

JObject json = new JObject();

Probé el json = (JObject)str;elenco pero no funcionó, ¿cómo puedo hacerlo?

caj
fuente

Respuestas:

298

JObjectdefine el método Parsepara esto:

JObject json = JObject.Parse(str);

Es posible que desee consultar la documentación de Json.NET .

Andrei
fuente
55
Esto se convertirá en {string}, agregará llaves extra a su string.
Vasil Valchev
62

si no quiere o necesita un objeto escrito, intente:

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

o intente con un objeto escrito intente:

Foo json  = JsonConvert.DeserializeObject<Foo>(str)
Kieran
fuente
Esto también funcionará con la lista de T si la cadena json entrante contiene una colección: List <Foo> json = JsonConvert.DeserializeObject <List <Foo>> (str)
A. Varma
22

Esto funciona

    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
fuente
espacio de nombres para 'JavaScriptSerializer': System.Web.Script.Serialization;
BernieSF
Definitivamente funcionó para mí. El uso de JObject después de las comillas dobles reemplazadas por comillas simples hizo el truco. ¡¡¡Gracias!!!
Carlos Parra
System.Web.Script.Serialization solo está disponible en .Net full framework.
Norgie
7

hay una manera interesante de lograr otro objetivo que es tener una base de clase fuertemente tipeada en json con herramientas muy poderosas que usé hace unos días por primera vez para traducir el resultado de tradedoubler json en clases

Es una herramienta simple: copie su fuente de pegado json y en pocos segundos tendrá una clase fuertemente orientada a json . De esta manera, utilizará estas clases, que son más potentes y fáciles de usar.

Espero que te pueda ayudar

makemoney2010
fuente
¡Justo lo que necesitaba! así que no tengo que definir una estructura de clase compleja a partir de algo creado en JavaScript
NicolasZ
mientras esto no responde la pregunta. Esta es una herramienta masiva para ahorrar tiempo.
Valamas
7

Puedes intentar lo siguiente:

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

Esto funciona para mí usando JsonConvert

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

Esto no funciona en el caso del JObject, esto funciona para los datos simples en formato json. He intentado mis datos de los datos de formato json a continuación para deserializar el tipo, pero no obtuve la respuesta.

Por esto 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
fuente
0

Si su cadena JSon tiene "" comillas dobles en lugar de una comilla simple 'y tiene \ n como indicador de una línea siguiente, entonces debe eliminarla porque no es una cadena JSon adecuada, por ejemplo, como se muestra a continuación:

            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);
Serenidad silenciosa
fuente