CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème désérialisation JSON (C#, Json.NET)

Thunderov
Thunderov
Niveau 9
31 octobre 2018 à 23:37:50

Bonjour,

Je rencontre actuellement un problème concernant la désérialisation d'un fichier Json vers un dictionnaire.
Le langage est C# et j'utilise Json.NET.

Mon fichier Json :

{
  "continue": {
    "Text": {
      "Position": "899, 468",
      "Color": {
        "B": 105,
        "G": 105,
        "R": 105,
        "A": 255
      },
      "Text": "CONTINUER",
      "FontSize": 24
    },
    "Pointer": {
      "Position": "879, 468",
      "Color": {
        "B": 105,
        "G": 105,
        "R": 105,
        "A": 255
      },
      "Text": "",
      "FontSize": 24
    },
    "Position": "899, 468",
    "Selected": false,
    "MouseClick": false,
    "Clicked": false,
    "PointerActive": true,
    "ColorClick": false
  },
  "new": {
    "Text": {
      "Position": "913, 540",
      "Color": {
        "B": 211,
        "G": 211,
        "R": 211,
        "A": 255
      },
      "Text": "NOUVEAU",
      "FontSize": 24
    },
    "Pointer": {
      "Position": "893, 540",
      "Color": {
        "B": 211,
        "G": 211,
        "R": 211,
        "A": 255
      },
      "Text": "",
      "FontSize": 24
    },
    "Position": "913, 540",
    "Selected": false,
    "MouseClick": false,
    "Clicked": false,
    "PointerActive": true,
    "ColorClick": false
  },
  "load": {
    "Text": {
      "Position": "913, 612",
      "Color": {
        "B": 105,
        "G": 105,
        "R": 105,
        "A": 255
      },
      "Text": "CHARGER",
      "FontSize": 24
    },
    "Pointer": {
      "Position": "893, 612",
      "Color": {
        "B": 105,
        "G": 105,
        "R": 105,
        "A": 255
      },
      "Text": "",
      "FontSize": 24
    },
    "Position": "913, 612",
    "Selected": false,
    "MouseClick": false,
    "Clicked": false,
    "PointerActive": true,
    "ColorClick": false
  },
  "options": {
    "Text": {
      "Position": "913, 684",
      "Color": {
        "B": 211,
        "G": 211,
        "R": 211,
        "A": 255
      },
      "Text": "OPTIONS",
      "FontSize": 24
    },
    "Pointer": {
      "Position": "893, 684",
      "Color": {
        "B": 211,
        "G": 211,
        "R": 211,
        "A": 255
      },
      "Text": "",
      "FontSize": 24
    },
    "Position": "913, 684",
    "Selected": false,
    "MouseClick": false,
    "Clicked": false,
    "PointerActive": true,
    "ColorClick": false
  },
  "exit": {
    "Text": {
      "Position": "913, 756",
      "Color": {
        "B": 211,
        "G": 211,
        "R": 211,
        "A": 255
      },
      "Text": "QUITTER",
      "FontSize": 24
    },
    "Pointer": {
      "Position": "893, 756",
      "Color": {
        "B": 211,
        "G": 211,
        "R": 211,
        "A": 255
      },
      "Text": "",
      "FontSize": 24
    },
    "Position": "913, 756",
    "Selected": false,
    "MouseClick": false,
    "Clicked": false,
    "PointerActive": true,
    "ColorClick": false
  }
}

Le fichier en soit n'est pas particulièrement intéressant. J'ai vérifié à plusieurs reprises l'intégrité du fichier Json avec divers sites et il ne semble pas y avoir d'erreur.

Or, à la suite de l'exécution de mon code :

buttonsInfo = JsonConvert.DeserializeObject<Dictionary<string, ScreenButton>>(File.ReadAllText("mainmenu_UI_buttons.txt"));

(buttonsInfo est un dictionnaire)

J'obtiens cette erreur :

Newtonsoft.Json.JsonReaderException : 'Unexpected character encountered while parsing value: {. Path 'continue.Text', line 3, position 13.'

Apparemment, il y a une erreur, un caractère inapproprié dans le fichier Json. Or, avec la précédente vérification, on se rend compte qu'il n'y a rien...

En outre, je fais la même manipulation avec un autre fichier, qui est légèrement différemment, mais qui est sérialisé de la même façon, et tout fonctionne bien.

De plus, le fichier Json obtenu (et que j'essaye de désérialiser) est sérialisé juste avant avec Json.NET aussi, comme l'autre fichier dont la manipulation de désérialisation fonctionne à merveille.

Je ne comprends donc pas d'où vient cette erreur tandis qu'en apparence, il n'y en a pas.

Si vous souhaitez davantage d'informations ou de précisions, n'hésitez pas...

Merci d'avance pour une éventuelle réponse.

Kilmor69
Kilmor69
Niveau 30
01 novembre 2018 à 00:32:04

le fait que "continue" (et d'autres) contienne deux fois "Text", ca pose pas souci ?

Thunderov
Thunderov
Niveau 9
01 novembre 2018 à 09:37:28

Le 01 novembre 2018 à 00:32:04 Kilmor69 a écrit :
le fait que "continue" (et d'autres) contienne deux fois "Text", ca pose pas souci ?

Non ce n'est pas un problème car un des "Text" est un "enfant" de l'autre. En gros, dans ma classe "ScreenButton", j'ai un public object "ScreenText" (que j'ai nommé Text) et dans cet objet, j'ai un public string "Text".

Comme le tout est public, pour set une valeur à "Text" (le string), j'effectue :

buttonsInfo["continue"].Text.Text = "cc";

C'est peut-être pas très ergonomique dit comme ça, mais ça me permet de m'y retrouver plus facilement dans mon code.

Thunderov
Thunderov
Niveau 9
01 novembre 2018 à 15:43:57

Finalement si, ça posait souci, j'ai différencié et maintenant ça marche.

Je m'étonne de ne pas avoir pensé à ça lors de mes différents tests, j'ai finalement essayé et ça a fonctionné.

Du coup, merci beaucoup. :-)

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment