Convertir la chaîne JSON en objet JSON c #


161

J'ai cette chaîne stockée dans ma base de données:

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

Cette chaîne est déjà au format JSON mais je souhaite la convertir en objet JObject ou JSON.

JObject json = new JObject();

J'ai essayé le json = (JObject)str;casting mais cela n'a pas fonctionné, comment puis-je le faire?

Réponses:


298

JObjectdéfinit la méthode Parsepour cela:

JObject json = JObject.Parse(str);

Vous voudrez peut-être vous référer à la documentation Json.NET .


5
Cela se convertira en {string}, ajoutera des accolades supplémentaires à votre chaîne.
Vasil Valchev

62

si vous ne voulez pas ou n'avez pas besoin d'un objet tapé, essayez:

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

ou essayez un objet tapé essayez:

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

Cela fonctionnera également avec la liste de T si la chaîne json entrante contient une collection: List <Foo> json = JsonConvert.DeserializeObject <List <Foo>> (str)
A. Varma

22

Cela marche

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

espace de noms pour 'JavaScriptSerializer': System.Web.Script.Serialization;
BernieSF

Certainement travaillé pour moi. Utiliser JObject après avoir remplacé les guillemets doubles pour les guillemets simples, a fait l'affaire. Merci!!!
Carlos Parra

System.Web.Script.Serialization n'est disponible que dans le framework complet .Net.
norgie

7

il y a un moyen intéressant d'atteindre un autre objectif qui est d'avoir une base de classe fortement type sur json avec des outils très puissants que j'ai utilisés il y a quelques jours pour la première fois pour traduire le résultat tradedoubler json en classes

C'est un outil simple: copiez votre coller source json et en quelques secondes vous aurez une classe fortement typée orientée json . De cette manière, vous utiliserez ces classes qui sont plus puissantes et faciles à utiliser.

J'espère que ça peut t'aider


Juste ce dont j'avais besoin! donc je n'ai pas besoin de définir une structure de classe complexe à partir de quelque chose créé en javascript
NicolasZ

alors que cela ne répond pas à la question. c'est un outil de gain de temps énorme.
Valamas

7

Vous pouvez essayer comme suit:

string output = JsonConvert.SerializeObject(jsonStr);

1

Cela fonctionne pour moi en utilisant JsonConvert

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

0

Cela ne fonctionne pas dans le cas du JObject, cela fonctionne pour les données au format json simple. J'ai essayé mes données des données au format json ci-dessous pour les désérialiser dans le type mais je n'ai pas obtenu la réponse.

Pour ce 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 votre chaîne JSon a "" guillemets doubles au lieu d'un guillemet simple 'et a \ n comme indicateur d'une ligne suivante, vous devez la supprimer car ce n'est pas une chaîne JSon correcte, exemple comme indiqué ci-dessous:

            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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.