Json.NET – formate un tableau d’objects avec des noms

J’ai un tableau comme celui-ci:

{ "214460106": { "HALTESTELLEN_ID": "214460106", "TYP": "stop", "DIVA": "60200001", "NAME": "Absberggasse", "GEMEINDE": "Wien", "GEMEINDE_ID": "90000", "WGS84_LAT": "48.1738010728644", "WGS84_LON": "16.3898072745249", "STAND": "", "PLATFORMS": [{ "LINIE": "6", "ECHTZEIT": "1", "VERKEHRSMITTEL": "ptTram", "RBL_NUMMER": "406", "BEREICH": "0", "RICHTUNG": "H", "REIHENFOLGE": "16", "STEIG": "6-H", "STEIG_WGS84_LAT": "48.173825035357", "STEIG_WGS84_LON": "16.3894569315641" }, { "LINIE": "6", "ECHTZEIT": "1", "VERKEHRSMITTEL": "ptTram", "RBL_NUMMER": "420", "BEREICH": "0", "RICHTUNG": "R", "REIHENFOLGE": "19", "STEIG": "6-R", "STEIG_WGS84_LAT": "48.1739867818893", "STEIG_WGS84_LON": "16.3898162576777" }, { "LINIE": "N6", "ECHTZEIT": "1", "VERKEHRSMITTEL": "ptBusNight", "RBL_NUMMER": "406", "BEREICH": "0", "RICHTUNG": "H", "REIHENFOLGE": "13", "STEIG": "N6-H", "STEIG_WGS84_LAT": "48.1738010728644", "STEIG_WGS84_LON": "16.3892682853544" }, { "LINIE": "N6", "ECHTZEIT": "1", "VERKEHRSMITTEL": "ptBusNight", "RBL_NUMMER": "420", "BEREICH": "0", "RICHTUNG": "R", "REIHENFOLGE": "6", "STEIG": "N6-R", "STEIG_WGS84_LAT": "48.1740406972867", "STEIG_WGS84_LON": "16.3896994766908" }], "LINES": ["6", "N6"] }, "214460107": { "HALTESTELLEN_ID": "214460107", "TYP": "stop", "DIVA": "60200002", "NAME": "Achengasse", "GEMEINDE": "Wien", "GEMEINDE_ID": "90000", "WGS84_LAT": "48.2845258075837", "WGS84_LON": "16.4488984539143", "STAND": "", "PLATFORMS": [{ "LINIE": "32A", "ECHTZEIT": "1", "VERKEHRSMITTEL": "ptBusCity", "RBL_NUMMER": "1168", "BEREICH": "0", "RICHTUNG": "H", "REIHENFOLGE": "7", "STEIG": "32A-H", "STEIG_WGS84_LAT": "48.284334521556", "STEIG_WGS84_LON": "16.4489523528313" }, { "LINIE": "32A", "ECHTZEIT": "1", "VERKEHRSMITTEL": "ptBusCity", "RBL_NUMMER": "1159", "BEREICH": "0", "RICHTUNG": "R", "REIHENFOLGE": "35", "STEIG": "32A-R", "STEIG_WGS84_LAT": "48.2844540754073", "STEIG_WGS84_LON": "16.4509825453734" }], "LINES": ["32A"] }, ... and so on 

Est-il possible de formater quelque chose comme ceci dans une List ? J’ai essayé de le faire mais il s’arrête toujours au numéro 21460106. Aussi essayé json2csharp mais cela ne fait que 5000 classes où chaque classe a le numéro comme nom.

Votre conteneur JSON externe n’est pas un tableau, mais un object JSON : un ensemble de paires nom / valeur délimitées par des virgules, entourées d’accolades. Étant donné que les noms sont des clés arbitraires et non fixes, le moyen le plus simple de désérialiser cela consiste à utiliser un dictionnaire.

Les types:

 public class PLATFORM { public ssortingng LINIE { get; set; } public ssortingng ECHTZEIT { get; set; } public ssortingng VERKEHRSMITTEL { get; set; } public ssortingng RBL_NUMMER { get; set; } public ssortingng BEREICH { get; set; } public ssortingng RICHTUNG { get; set; } public ssortingng REIHENFOLGE { get; set; } public ssortingng STEIG { get; set; } public ssortingng STEIG_WGS84_LAT { get; set; } public ssortingng STEIG_WGS84_LON { get; set; } } public class RootObject { public ssortingng HALTESTELLEN_ID { get; set; } public ssortingng TYP { get; set; } public ssortingng DIVA { get; set; } public ssortingng NAME { get; set; } public ssortingng GEMEINDE { get; set; } public ssortingng GEMEINDE_ID { get; set; } public ssortingng WGS84_LAT { get; set; } public ssortingng WGS84_LON { get; set; } public ssortingng STAND { get; set; } public List PLATFORMS { get; set; } public List LINES { get; set; } } 

Code de désérialisation:

 var dict = JsonConvert.DeserializeObject>(json); 

J’ai choisi long comme type de clé car tous vos noms de propriétés racine semblent être des chaînes intégrales. Vous pouvez utiliser Dictionary sinon.

Pour générer la classe RootObject , j’ai copié le JSON à partir de l’ une des valeurs de l’object racine – la valeur "214460106" dans ce cas – vers http://json2csharp.com/ .

Échantillon de violon .

Pour la documentation connexe, voir: Désérialiser un dictionnaire .

Je ne crois pas qu’il soit possible d’utiliser un nombre comme champ. Essayez de commencer par un caractère alpha, tel que A214460106.

Ceci est juste un moyen rapide de vérifier que votre formatage est correct. Vous pouvez convertir de liste en chaîne Json et revenir en une unité de datation juste pour vérifier que la chaîne fonctionne correctement sans avoir besoin d’utiliser un modèle.

  private void button1_Click(object sender, EventArgs e) { List employees = new List(); Employees employee = new Employees(); employee.firstName = "a"; employees.Add(employee); ssortingng json = JsonConvert.SerializeObject(employees); DataTable dt = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable))); } } public class Employees { public ssortingng firstName { get; set; } public ssortingng lastName { get; set; } }