我是使用JSON的新手,我正努力在列表中返回一个列表。我得到以下JSON:Json返回列表中的列表
{
"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
}
我已经使用了JSON DataContractJsonSerializer desrialized这一点,它看起来像下面这样:
编辑:取得由carlosfigueira这里
被建议修改[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; }
}
序列号我看起来像下面这样:
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);
我创建的回报如下所示:
public class WhatEventArgs : EventArgs
{
public AutoCompleteResponse response { get; set; }
}
*编辑:将用来在这里得到的数据柜面这是有帮助的代码......这是怎么我得到的数据从价值观,也许是我做错了什么,但我没有得到任何数据(它为空),我不知道我做错了*
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");
}
我现在需要从提示获取的实际值,但是从值返回的数据是空的。我不知道为什么,请看看你是否能看到我看不到的东西。
编辑修正了JSON,失踪闭幕]为“面”
哟耶,我从众你喜欢表,所以我们把列表中的列表,以便您可以列出,而你列出 – maxbeaudoin
您可以添加代码,你真正做反序列化,由于 – maxbeaudoin
已添加代码...我喜欢列表;) – Ghostfire