0
votes

Gestion du dictionnaire vide lors de la désérialisation de la réponse JSON dans .NET

La structure de la réponse JSON est au format

var settings = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };

var json_response = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, double>>>(response, settings);

qui doit être désérialisé.

Parfois, le dictionnaire interne est reçu comme vide, {} ce qui renvoie une erreur

Error converting value \"{}\" to type 'System.Collections.Generic.Dictionary`2[System.String,System.Double]'. Path '513215', line 1, position 14.

Même en essayant le morceau de code ci-dessous: cela donne la même erreur

Dictionary<string,Dictionary<string,double>>

Comment gérer cette erreur et quelles sont les meilleures pratiques pour le gérer?

Exemple JSON qui provoque une erreur

entrez la description de l'image ici


5 commentaires

Je ne vois pas la réponse JSON de votre désérialisation? Dictionary> est simplement le type vers lequel vous souhaitez désérialiser.


@RoadRunner Voulez-vous un exemple de réponse ou? La dernière ligne de code est utilisée pour la désérialisation


@Kitwradr Pourquoi avez-vous {} en premier lieu? C'est un objet vide. Et {} n'est pas nul, donc vos paramètres ne fonctionneront pas. De plus, Json.NET s'attend à ce qu'un dictionnaire soit un objet ou null . Jetez un œil à cette question: stackoverflow.com/questions/45572652/...


S'il vous plaît, partagez l'exemple json, qui provoque une erreur


Ajout de la capture d'écran dans la question


3 Réponses :


1
votes

Rien ne vous empêche de vérifier la réponse pour un ensemble vide ou une valeur incorrecte avant de passer par cette désérialisation. Je le fais tout le temps. :)


1 commentaires

Comment vérifier si un dictionnaire interne est vide? @Rich K.



1
votes

Après avoir vu votre JSON, je pense que le problème réside en vous JSON lui-même. Pas sûr, car vous utilisez un visualiseur. Ce "{... beaucoup de choses ...}" ne sera pas analysé correctement parce que vous avez des guillemets à l'intérieur.

Je prendrais votre JSON brut sur https://jsonlint.com/ et voir ce qu'il doit faire dire. Une fois que vous aurez résolu le problème, vous arrêterez probablement de lancer des erreurs. BTW votre première "chaîne" 513215 ... n'est pas une chaîne dans le monde de JSON, c'est un nombre. Il doit être entouré de guillemets. Encore une fois, cela pourrait être le visualiseur.

N'oubliez pas https://www.json.org/ pour voir tous ces JSON des règles.


0 commentaires

0
votes

La meilleure pratique serait de ne pas envoyer de dictionnaires vides et de toujours envoyer null au lieu de {}


0 commentaires