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