Je suis nouveau à l'aide de JSON et j'ai du mal à retourner spécifiquement une liste, dans une liste. Je reçois le JSON suivant:Json retournant une liste dans une liste
{
"parameters": {
"tbdb": "trudon",
"min_prefix_length": "2",
"service": "prefix",
"template": "service.json",
"term_prefix": "plu"},
"termHints": [
{
"name": "Plumbers & Sanitary Engineers",
"id":"209654",
"values": {
"value":"Plumbers & Sanitary Engineers",
"pre_em":"",
"em":"Plu",
"post_em":"mbers & Sanitary Engineers",
"nature":"PT",
"id":"209654"
}
},
],
"facets": [
{
"id":"209654",
"name":"Plumbers & Sanitary Engineers"
}
],
"total":1
}
Je desrialized cela en utilisant le JSON DataContractJsonSerializer et il se présente comme suit:
modifié: apporté les modifications qui ont été proposées par carlosfigueira ici
[DataContract]
public class AutoCompleteResponse
{
[DataMember(Name = "parameters")]
public Parameter Parameters { get; set; }
[DataMember(Name = "termHints")]
public List<termHints> hints { get; set; }
[DataMember(Name = "total")]
public string Total { get; set; }
}
[DataContract]
public class Parameter
{
[DataMember(Name = "tbdb")]
public string tbdb { get; set; }
[DataMember(Name = "min_prefix_length")]
public string min_prefix_length { get; set; }
[DataMember(Name = "service")]
public string service { get; set; }
[DataMember(Name = "template")]
public string template { get; set; }
[DataMember(Name = "term_prefix")]
public string term_prefrix { get; set; }
}
[DataContract]
public class termHints
{
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "id")]
public string id { get; set; }
[DataMember(Name = "values")]
public values Values { get; set; }
[DataMember(Name = "facets")]
public facets Facets { get; set; }
}
[DataContract]
public class values
{
[DataMember(Name = "value")]
public string value_name { get; set; }
[DataMember(Name = "pre_em")]
public string pre_em { get; set; }
[DataMember(Name = "em")]
public string em { get; set; }
[DataMember(Name = "post_em")]
public string post_em { get; set; }
[DataMember(Name = "nature")]
public string nature { get; set; }
[DataMember(Name = "id")]
public string value_id { get; set; }
}
[DataContract]
public class facets
{
[DataMember(Name = "id")]
public string facet_id { get; set; }
[DataMember (Name = "name")]
public string facet_name {get; set; }
}
la sérialisation je ressemble à ce qui suit:
WebClient w = new WebClient();
w.DownloadStringCompleted += (a, b) =>
{
// Check for errors
if (b == null) { return; }
if (b.Error != null) { return; }
if (string.IsNullOrEmpty(b.Result)) { return; }
// Desearealize from JSON to .NET objects
Byte[] bytes = Encoding.Unicode.GetBytes(b.Result);
MemoryStream memoryStream = new MemoryStream(bytes);
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(AutoCompleteResponse));
AutoCompleteResponse autocompleteSearchResponse = dataContractJsonSerializer.ReadObject(memoryStream) as AutoCompleteResponse;
memoryStream.Close();
// Raise Event
this.OnSearchCompleted(
new WhatEventArgs()
{
response = autocompleteSearchResponse
}
);
};
w.DownloadStringAsync(builder.Uri);
Le retour que je crée présente comme suit:
public class WhatEventArgs : EventArgs
{
public AutoCompleteResponse response { get; set; }
}
* edit: en ajoutant le code qui est utilisé pour obtenir les données ici Incase cela est utile ... Voilà comment je reçois les données à partir des valeurs, peut-être que je fais quelque chose de mal, mais je ne reçois pas de données (il est nul) et je ne sais pas ce que je l'ai fait mal *
protected void cmdSearch_Click(object sender, EventArgs e)
{
AutocompleteWhat search = new AutocompleteWhat()
{
Num = 2
};
search.SearchCompleted += (a, b) =>
{
List<values> _value = new List<values>();
foreach (termHints item in b.response.hints)
{
_value.Add(item.Values);
}
if (_value.Count > 0)
{
dgvResults.DataSource = _value;
}
else
{
dgvResults.DataSource = null;
}
dgvResults.DataBind();
};
search.Search("plu");
}
Je dois maintenant obtenir les valeurs réelles des conseils, Cependant, les données renvoyées à partir des valeurs sont vides. Je n'ai aucune idée pourquoi, s'il vous plaît voir si vous pouvez voir ce que je ne peux pas voir.
modifier Correction du JSON, il manquait la fermeture] pour « facettes »
Yo Dawg, je vous troupeau comme des listes, nous avons donc mis une liste dans votre liste afin que vous puissiez la liste pendant que vous listez – maxbeaudoin
Pourriez-vous ajouter le code où vous faites réellement désérialisation, grâce – maxbeaudoin
Le code a été ajouté ... J'aime les listes;) – Ghostfire