Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récuperer les données d'un fichier JSON

Sujet résolu
10 octobre 2015 à 21:42:21

Salut !

Alors voila, j'ai du passé la journée a cherche un peu partout sur le net (site français et Anglais) pour trouver le moyen de récuperer mes données présente dans mon fichier JSON (.json). 

J'espérais pouvoir faire comme pour un fichier XML mais je n'y arrive pas, je me tourne donc vers vous en espérant trouver une solution.

Code :

 public static void LoadJson(Map maMap)
        {
            var stream = File.OpenText("testDJ.json");
            string jsonArray = stream.ReadToEnd();

            dynamic result = JsonConvert.DeserializeObject(jsonArray);

            foreach(var prop in jsonArray)
            {
                maMap.height = prop.height;
            }
        }



Mon problème est que je souhaite récupérer les valeurs présentes dans le fichier pour les attribuer aux propriétés de ma classe Map (tableau de valeurs pour mon tileset etc...)

En espérant que vous puissiez m'aider..

Merci !

-
Edité par SissouU 10 octobre 2015 à 21:43:10

  • Partager sur Facebook
  • Partager sur Twitter
C#/Java/PHP/JS/HTML/CSS ||| En recherche de projets de groupe ! ;) || https://thomasgalibert.wordpress.com/
13 octobre 2015 à 15:59:50

Hello ,

et si tu utilisais json.NET ? => ici

JsonSerializer serializer = new JsonSerializer();
   MonObjet obj = serializer.Deserialize<MonObjet>(File.ReadAllText(@".\path\to\json\testDJ.json");

après soit tu fais une classe MonObjet soit tu reste en dynamic

Enjoy

-
Edité par speederchaton 13 octobre 2015 à 16:02:28

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2015 à 13:32:32

Ce que je ferais :

  • Copier les data de ton fichier JSON et les coller en tant que nouvelle classe de sérialisation sous Visual Studio (Edition > Collage spécial > Coller le code JSON en tant que classe).
  • Désérialiser le flux dans la classe fraîchement créée (plutôt que de passer par un dynamic), via un code dans ce style là (pour le coup, inutile de rajouter une dépendance de plus pour un truc aussi trivial selon moi).
MaStructureJson jsonData    = null;
var serializer              = new DataContractJsonSerializer(typeof(MaStructureJson));
            
using (var jsonStream = File.OpenText("testDJ.json"))
{ jsonData = serializer.ReadObject(jsonStream.BaseStream) as MaStructureJson; }
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2015 à 19:40:18

Salut, merci de vos réponses, mais à force de chercher et d'essayer des choses j'ai finalement trouvé ! Je passe le sujet en résolu ^^

J'ai créer une classe LireMonJson a part qui me permet de l'implementer dans n'importe quel de mes projets où j'ai besoin de lire une map en Json, il me suffira juste d'adapter certaines choses à chaque fois :)

voici le code si quelqu'un en a besoin :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using System.Runtime.Serialization;
using System.IO;
using System.Runtime.Serialization.Formatters.Soap;

namespace MonPremierDJ
{
    class LireMonJson
    {
        public static void LoadJson(Map maMap)
        {
            Layer lay = new Layer();
            Tileset tlS = new Tileset();

            Rootobject layer = new Rootobject();
            var stream = File.OpenText("testDJ.json");
            string json = stream.ReadToEnd();
            Rootobject malist = (Rootobject)JsonConvert.DeserializeObject<Rootobject>(json);
            maMap.Height = malist.height;
            maMap.Width = malist.width;
            maMap.Tileheight = malist.tileheight;
            maMap.Tilewidth = malist.tilewidth;

            layer.layers = malist.layers;
            foreach (Layer laye in layer.layers)
            {
                lay = laye;
            }

            foreach(Tileset tl in malist.tilesets)
            {
                tlS.name = tl.name;
            }

            maMap.Name = tlS.name;
            maMap.Data = lay.data;

            stream.Close();
        }
    }

    public class Rootobject
    {
        public int height { get; set; }
        public Layer[] layers { get; set; }
        public int nextobjectid { get; set; }
        public string orientation { get; set; }
        public Properties properties { get; set; }
        public string renderorder { get; set; }
        public int tileheight { get; set; }
        public Tileset[] tilesets { get; set; }
        public int tilewidth { get; set; }
        public int version { get; set; }
        public int width { get; set; }
    }

    public class Properties
    {
    }

    public class Layer
    {
        public int[] data { get; set; }
        public int height { get; set; }
        public string name { get; set; }
        public int opacity { get; set; }
        public string type { get; set; }
        public bool visible { get; set; }
        public int width { get; set; }
        public int x { get; set; }
        public int y { get; set; }
    }

    public class Tileset
    {
        public int firstgid { get; set; }
        public string image { get; set; }
        public int imageheight { get; set; }
        public int imagewidth { get; set; }
        public int margin { get; set; }
        public string name { get; set; }
        public Properties1 properties { get; set; }
        public int spacing { get; set; }
        public int tileheight { get; set; }
        public int tilewidth { get; set; }
        public string transparentcolor { get; set; }
    }

    public class Properties1
    {
    }
}



  • Partager sur Facebook
  • Partager sur Twitter
C#/Java/PHP/JS/HTML/CSS ||| En recherche de projets de groupe ! ;) || https://thomasgalibert.wordpress.com/
22 juin 2020 à 16:40:44

Bonjour,

J'ai un fichier json et je n'ai pas besoins de tous ces paramètres comment je peux récupérer quelques attributs en C#???

Merci d'avance!

  • Partager sur Facebook
  • Partager sur Twitter
23 juin 2020 à 19:39:02

@OumaymaJerbi Bonjour, merci de ne pas déterrer d'ancien sujet résolu.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter