Bonjour,

J'aimerais mettre tout un JSON dans un Dictionary<String, String>, il s'agit d'un fichier de données assez volumineux pouvant contenir objet/tableau et parfois des objets dans des objets, etc
Les tableaux doivent former une chaîne de caractère chacun des éléments séparés par un |, exemple:
clé: cars
valeur: Ford|BMW|Fiat
Je me suis fais un JSON de test
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
  "product": "test",
  "version": 3,
  "releaseDate": "2014",
  "demo": true,
  "cars": [
    "Ford",
    "BMW",
    "Fiat"
  ],
  "person": {
    "id": 12345,
    "name": "Guillaume",
    "phones": {
      "home": "0223456789",
      "mobile": "0723456789"
    },
    "email": [
      "email@outlook.fr",
      "email@gmail.com"
    ],
    "dateOfBirth": "1995",
    "preferedColours": [
      "Green",
      "Blue"
    ]
  }
}
et un projet en C# contenant une classe "parser":

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
 
class parser
{
    private JObject document;
 
    public parser(JObject pDocument)
    {
        this.document = pDocument;
    }
 
    private String jArrayToString(JArray arrayJson)
    {
        String data = "";
        foreach (object item in arrayJson)
        {
            data += item.ToString() + "|";
        }
        return data;
    }
 
    public Dictionary<String, String> doIt()
    {
        Dictionary<String, String> result = new Dictionary<String, String>();
 
        foreach (var property in document.Properties())
        {
            if (property.Value is JValue) //si c'est une valeur brut
            {
                result.Add(property.Name, property.Value.ToString());
            }
            else if (property.Value is JArray) //si c'est un array -> jArrayToString
            {
                result.Add(property.Name, jArrayToString((JArray)property.Value));
            }
            else if (property.Value is JObject) //faudrait voir pour fonction récursive ?
            {
                foreach (var x in property.Value)
                {
                    result.Add(((JProperty)(x)).Name, ((JProperty)(x)).Value.ToString());
                }
            }
        }
        return result;
    }
}
je récupère le json parsé de cette façon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
parser Parser = new parser(JObject.Parse(tbJson.Text));
Dictionary<String, String> data = Parser.doIt();
foreach (KeyValuePair<string, string> kvp in data)
  {
    Console.WriteLine("{0}:{1}", kvp.Key, kvp.Value);
  }
ce qui donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
product:test
version:3
releaseDate:2014
demo:True
cars:Ford|BMW|Fiat|
id:12345
name:Guillaume
phones:{
  "home": "0223456789",
  "mobile": "0723456789"
}
email:[
  "email@outlook.fr",
  "email@gmail.com"
]
dateOfBirth:1995
preferedColours:[
  "Green",
  "Blue"
]
alors que je voudrais plutôt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
product:test
version:3
releaseDate:2014
demo:True
cars:Ford|BMW|Fiat|
id:12345
name:Guillaume
home:0223456789
mobile:0723456789
email:email@outlook.fr|email@gmail.com|
dateOfBirth:1995
preferedColours:Green|Blue|
Peut être que je devrais essayer de faire une fonction récursive qui s'appel dès lors que j'arrive sur un objet Json ? Ou qu'il existe un moyen plus simple et/ou plus propre de traiter mes données Json ?

Merci d'avance