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?

Respuestas:


298

JObjectdefine el método Parsepara esto:

JObject json = JObject.Parse(str);

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


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)

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));

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


¡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


1

Esto funciona para mí usando JsonConvert

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

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"
              }
            ]
          }
        ]
      }
    ]
  }
}

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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.