Je cherche à analyser JSON dans une liste C #. Le problème est que les données que j'essaie d'analyser ne sont pas fournies au format Array. Voici l'exemple JSON
List<Record> Records
Ma classe Model ressemble à quelque chose comme ça
public class Record { public string Name { get; set; } public string Description { get; set; } }
Ce que je recherche, c'est de créer un p >
{ "results":{ "records":{ "record:8545314564":{ "name":"record 1", "description":"description for record 1" }, "record:2254698789":{ "name":"record 2", "description":"description for record 2" }, "record:7454687851":{ "name":"record 3", "description":"description for record 3" } } } }
Je me fiche du nom du nœud enfant des enregistrements (par exemple, enregistrement: 8545314564, enregistrement: 2254698789, etc.). Tout ce qui m'importe, c'est le nom et la propriété de description à l'intérieur de chaque nœud d'enregistrement.
J'apprécierais vraiment que quelqu'un puisse fournir un exemple de code en C # pour obtenir le résultat souhaité.
4 Réponses :
Vous pouvez faire ce qui suit:
public class RootObject { public ResultObject results { get; set; } } public class ResultObject { public Dictionary<string, RecordObject> records { get; set; } } public class RecordObject { public string name { get; set; } public string description { get; set; } }
Où RootObject est défini comme
var result = JsonConvert.DeserializeObject<RootObject>(jsonString); var recordCollection = result.results.records.Values.ToList();
Sortie
En utilisant un Dictionnaire
, vous pouvez utiliser un nom d'enregistrement dynamique comme clé.
public class Root { [JsonProperty("results")] public Result Results { get; set; } } public class Result { [JsonProperty("records")] public Dictionary<string, Record> Records { get; set; } } public class Record { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } } var data = JsonConvert.DeserializeObject<Root>(json);
Vous pouvez analyser le Json, puis parcourir les jetons pour chaque valeur de propriété.
// assuming json is your json string JObject obj = JObject.Parse(json); JToken sec = obj["results"]["records"]; foreach (JToken token in sec) { string name = token.First()["name"].ToString(); string description = token.First()["description"].ToString(); }
Et une autre alternative:
using Newtonsoft.Json.Linq; ... var jObject = JObject.Parse(yourJsonString); var records = jObject["results"]["records"] .Children() .Children() .Select(i => i.ToObject<Record>()) .ToList();
Vous pouvez trouver la documentation Json.NET pertinente ici: https://www.newtonsoft.com/json/help/html/SerializingJSONFragments. htm