-1
votes

Comment extraire ces valeurs de la chaîne JSON

J'ai cette chaîne JSON, mais je ne sais pas comment je vais analyser les valeurs à l'intérieur:
a
HAS2 strong>

Je réussis à analyser correctement "l'identifiant", mais ne savez pas comment accéder à:
cors
Cors2
Cors3
Cors4
strong> p>

Je reçois l'erreur:
'ne peut pas désérialiser l'objet JSON actuel (par exemple, {"nom": "valeur"}) dans type' system.string [] 'car le type nécessite un réseau JSON (par exemple [1,2,3]) Strong> P>

J'ai collé le JSON dans la Pastebin: https://pastebin.com/iwggv9vk p>

Le code que j'ai: p >

//responseBody holds the JSON string
            dynamic stuff = JsonConvert.DeserializeObject(responseBody);
            foreach (var info in stuff)
            {   
                dynamic id = info.Value.id; //''Newtonsoft.Json.Linq.JValue' does not contain a definition for 'id''
                dynamic has = info.Value.has;
                dynamic has2 = info.Value.has2;
                if (has != null && has2 != null)
                {
                    dynamic cors = has.CORS;
                    if(cors != null)
                    {
                        MessageBox.Show(cors.ToString());
                    }
                }
            }


8 commentaires

La chaîne JSON située à la fois dans votre code de code et dans votre lien Pastebin n'est pas valide JSON.


Je ne comprends pas votre problème, mais le deuxième désériialize (HAS2) est incorrect.


Eh bien, regardez mon commentaire à votre autre question: Stackoverflow.com/Questtions/55010495/... Il y a quelques heures. Ce commentaire s'applique aussi ici. Vous êtes ici un peu répéter votre erreur (s) ...


A et HAS2 ne sont pas des chaînes ni des tableaux de réglages, ce sont des objets complexes et vous devrez les désertir en tant que tel ou utiliser dynamique ou jobject


J'ai reformaté votre bloc de code. Comme il s'agit de c # (et non de javascript), vous devez utiliser l'icône avec le symbole {} sur celui-ci pour formater votre code, pas celui qui le formate comme JavaScript.


Il suffit de coller le Json dans votre question; Il n'y a aucune raison de rendre les gens à aller chez un autre site.


J'ai modifier mon message avec une nouvelle approche à l'aide de dynamique et d'objet, mais obtenez cette erreur: '' '"newtonsoft.json.linq.jvalue' ne contient pas de définition pour 'id' ''


Dupliqué possible de ne peut pas désérialiser l'objet JSON actuel ( par exemple {"nom": "valeur"}) dans le type 'system.collections.generic.list`1


3 Réponses :


1
votes

You Json était incorrect, la clé a contient une liste de numéros de dict.

Vous avez besoin de changer votre désérialisation vers le dictionnaire ou de changer votre JSON.

Ici, vous pouvez voir un exemple: https://json-schema.org/unStanding-json- Schéma / référence / Array.html # Array


1 commentaires

Oui j'ai essayé de faire une approche en utilisant dynamique et objet. J'ai modifié mon post ajoutant cette approche, mais une erreur se passe également.



0
votes

dans votre JSON, a est un objet, pas un tableau. Vous devez modéliser votre classe pour prendre en charge un objet contenant les attributs cors , cors2 , etc., et ainsi de suite.

Edit: Si vous souhaitez coller à a être un tableau, vous devez modifier votre JSON pour correspondre à ce qu'un tableau s'attend à ce qui pourrait être comme: a: [faux, vrai] et omettez la chose Cors.


0 commentaires

2
votes

Tout d'abord, corrigez votre JSON:

String JSONstring = "{ \"id\": \"hello\", \"name\": \"Hello\", \"has\": { \"CORS\": false, \"CORS2\": true }, \"has2\": { \"CORS3\": false, \"CORS4\": true } }\";"
var deserializedTicker = JsonConvert.DeserializeObject<JsonInfo>(JSONstring);


1 commentaires

Maintenant, je comprends. Ce code fonctionne. J'essaie d'accrocher tous les scénarios. Donc, ce n'est pas un tableau car je pensais que c'était un objet. Donc, je suis suivant comment vous configurez le code si bien. Merci beaucoup pour votre aide!