Converter string JSON em objeto JSON c #


161

Eu tenho essa String armazenada no meu banco de dados:

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

Essa sequência já está no formato JSON, mas desejo convertê-la em um objeto JObject ou JSON.

JObject json = new JObject();

Eu tentei o json = (JObject)str;elenco, mas não funcionou, então como posso fazer isso?

Respostas:


298

JObjectdefine o método Parsepara isso:

JObject json = JObject.Parse(str);

Você pode consultar a documentação do Json.NET .


5
Isso será convertido para {string}, adicionará colchetes extras à sua string.
Vasil Valchev

62

se você não quiser ou precisar de um objeto digitado, tente:

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

ou tente um objeto digitado, tente:

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

Isso também funcionará com a lista de T se a sequência json recebida contiver uma coleção: List <Foo> json = JsonConvert.DeserializeObject <Lista <Foo>> (str)
A. Varma

22

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

namespace para 'JavaScriptSerializer': System.Web.Script.Serialization;
BernieSF

Definitivamente funcionou para mim. Usar JObject após substituir aspas duplas por aspas simples, resolveu o problema. Obrigado!!!
Carlos Parra

System.Web.Script.Serialization está disponível apenas na estrutura completa do .Net.
norgie 20/03

7

existe uma maneira interessante de atingir outro objetivo, que é ter uma base de classes de tipo forte no json com ferramentas poderosas que eu usei alguns dias atrás pela primeira vez para traduzir o resultado do tradedoubler json em classes

É uma ferramenta simples: copie sua pasta de origem json e em alguns segundos você terá uma classe json fortemente tipada . Dessa maneira, você usará essas classes, que são mais poderosas e simples de usar.

Espero que possa ajudá-lo


Apenas o que eu precisava! por isso eu não tenho para definir uma estrutura de classe complexa de algo criado em javascript
NicolasZ

enquanto isso não responde à pergunta. esta é uma ferramenta massiva de economia de tempo.
Valamas 15/02

7

Você pode tentar o seguinte:

string output = JsonConvert.SerializeObject(jsonStr);

1

Isso funciona para mim usando JsonConvert

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

0

Isso não funciona no caso do JObject, isso funciona para os dados simples do formato json. Eu tentei meus dados dos dados do formato json abaixo para desserializar no tipo, mas não obtive a resposta.

Para este 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 a sua string JSon "" tiver aspas duplas em vez de uma aspas simples 'e \ n como indicador de uma próxima linha, será necessário removê-la, porque essa não é uma string JSon apropriada, exemplo como mostrado abaixo:

            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);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.