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
3 Réponses :
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. :)
Comment vérifier si un dictionnaire interne est vide? @Rich K.
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.
La meilleure pratique serait de ne pas envoyer de dictionnaires vides et de toujours envoyer null
au lieu de {}
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 unobjet
ounull
. 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