Lecture de fichier json en c#, sans lib à la main
Lecture de json
Chez moi l'exemple dans les cours d'utilisation de json n'a jamais fonctionner.
Les recherche sur le net et les forums n'ont pas été plus concluante.
J'ai donc du créer une classe qui permet une lecture de fichier simple et de récupérer les valeurs sur des variables.
Les types de retour supporter son string, int et float.
Les besoins:
- lire un fichier texte.
- filtrer les espaces, saut de ligne et tabulation de la lecture.
- extraire un string d'un autre string avec un caractère de debut et de fin.
- extraire un string d'un autre string avec uniquement le caractère de début.
- conversion de string en int.
- conversion de string en float.
1) Lecture et filtrage
using System.IO; // lecture StreamReader file = File.OpenText("file.json"); string reading = file.ReadToEnd(); // filtre string filter_out=""; for(int i=0;i<reading.Length;i++) { if(reading[i]!=' ' || reading[i]!='\n' || reading[i]!='\b') { filter_out+=reading[i]; } }
2) Lecture ligne par ligne entre crochet
int i_tps = -1;// position de la ligne for(int i=0;i<filter_out.Length;i++) { if(filter_out[i]=='{') {// enregistrement position du premier crochet i_tps = i+1; } else if(filter_out[i]==',' || filter_out[i]=='}') {// detection de la fin ligne string line = filter_out.Substring(i_tps,i-i_tps); // // récupèration de la ligne // i_tps = i+1; } }
3) Extraction d'un string avec char debut et fin
// variables d'entrée // // string dont on extraire un string string s_input; //char du début de l'extraction char cbegin; //char de fin d'extraction char cend; // variables de sortie // // string extrait string s_out=""; int i_beg=-1; // position du 1er char int i_end=-1; // position du 2eme char for(int i=0;i<s_input.Length;i++) { if(i_beg==-1 && s_out[i]==cbegin) i_beg = i+1; else if(i_beg>-1 && s_input[i]==cend) { i_end = i; break; } } if(i_beg+i_end>0 && i_end-i_beg <= s_input.Length) { s_out = s_input.Substring(i_beg,i_end-i_beg); }
4) Extraction d'un string a partir d'un char de début
// variables d'entrée // // string dont on extraire un string string s_input; //char du début de l'extraction char cbegin; // variables de sortie // // string extrait string s_out=""; int i_beg=-1;// position du char for(int i=0;i<s_input.Length;i++) { if(i_beg==-1 && s_input[i]==cbegin) i_beg = i+1; } if(i_beg+i_end>0 && i_end-i_beg <= s_input.Length) { s_out = s_input.Substring(i_beg,s_input.Length-i_beg); }
5) Conversion string -> int, float
string str; // string ver int int n_int = Int32.Parse(str); // string ver float float n_float = float.Parse(str);
version complète du code ici gist.github.com/oblerion/JsonObject.cs
Oui le cours en question était obsolète, il y a maintenant :
using System.Text.Json;
Et j'ai montré la nouvelle méthode pendant les cours de certification. Voilà l'exemple qu'on avait fait ensemble :
// Ecriture Level levelTest = new Level(); Random random = new Random(); levelTest.Name = "Level 1"; levelTest.Description = "Ceci est le niveau 1 du jeu"; levelTest.Map = new int[10][]; for (int l = 0; l < 10; l++) { levelTest.Map[l] = new int[10]; for (int c = 0; c < 10; c++) { levelTest.Map[l][c] = random.Next(0, 10 + 1); } } Trace.WriteLine("Level instancié"); string jsonString = JsonSerializer.Serialize(levelTest); File.WriteAllText("Level.json", jsonString); // Lecture string jsonString = File.ReadAllText("Level.json"); Level levelTest = JsonSerializer.Deserialize<Level>(jsonString);
@david Cette méthode ne fonctionne pas non plus, c'est pour ça que j'ai utiliser du texte au lieu du json dans le projet c#/monogame.
Je trouve que ma classe plus simple à utiliser même si elle reste limité.
De plus c'est assez instructif de créer ce genre d'outils, c'est les bases pour créer ses propres format de donnée
@oblerion oui c'est instructif mais très limité, à la limite autant faire un .INI, et aucune raison que le JSON officiel ne marche pas, il faudrait explorer. Ne pas oublier de passer les membres de la classe que tu veux sérialiser en propriétés pour que la réflexivité soit possible.
Posté par: @oblerionversion complète du code ici gist.github.com/oblerion/JsonObject.cs
nouvelle page github ici github.com/oblerion/JsonObject
La partie de lecture allégée.
L'ajout de la lecture de string entre "",
Conversion du type au début de la lecture, au lieu de la fin.
Ajout de la lecture récursive d'objet indexer.
Version 0.2 publier
version 0.2
Ajout
- lecture de bool
- méthode IsEmpty() retourne à bool si objet est vide ou si le fichier n'existe pas
- renommage des méthodes pour qu'elle commence par une majuscule
version 0.2-1 publier
https://github.com/oblerion/JsonObject.cs/releases/tag/0.2-1
- 6 Forums
- 141 Sujets
- 506 Posts
- 0 En ligne
- 44.5 {numéro}K Membres