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?

caj
fonte

Respostas:

298

JObjectdefine o método Parsepara isso:

JObject json = JObject.Parse(str);

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

Andrei
fonte
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)
Kieran
fonte
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));
Karthik Ganesan
fonte
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

makemoney2010
fonte
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);
B.Mohamed Riyas
fonte
1

Isso funciona para mim usando JsonConvert

var result = JsonConvert.DeserializeObject<Class>(responseString);
HamidKhan
fonte
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"
              }
            ]
          }
        ]
      }
    ]
  }
}
Rahul Shukla
fonte
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);
Serenidade silenciosa
fonte