我需要在线填充来自JSON的comboBox。它是一个WindowsForms项目,在C#中。 PHP页面返回以下字符串:
public class User
{
public int user_id { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
}
public class LegendsUsers
{
public int user_id { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
}
public class RootObject
{
public List<User> Users { get; set; }
public List<LegendsUsers> LegendsUsers { get; set; }
}
public class ComboboxItem
{
public string Text { get; set; }
public object Value { get; set; }
public override string ToString()
{
return Text;
}
}
String resposta = new
WebClient().DownloadString("http://www.sample.com/readjson.php");
var x = JsonConvert.DeserializeObject<RootObject>(resposta);
foreach (var user in x.Users)
{
ComboboxItem item = new ComboboxItem();
item.Text = user.first_name + " " + user.last_name;
item.Value = user.user_id;
comboBox1.Items.Add(item);
}
user_id将是comboBox ID,first_name + last_name将是文本。我尝试了很多方法,但没有人工作得很好。有什么建议吗?
我的一次尝试:
{{1}}
错误:
Newtonsoft.Json.JsonSerializationException:无法将当前JSON数组(例如[1,2,3])反序列化为类型&#39; NB_WBF_Demo.NB_WBF_Demo + RootObject&#39;因为类型需要JSON对象(例如{&#34; name&#34;:&#34; value&#34;})才能正确反序列化。 要修复此错误,请将JSON更改为JSON对象(例如{&#34; name&#34;:&#34; value&#34;})或将反序列化类型更改为实现集合接口的数组或类型(例如ICollection,IList)就像可以从JSON数组反序列化的List。 JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化。 路径&#39;&#39;,第1行,第1位。
答案 0 :(得分:3)
由于你的json是一个数组/ List,而不是一个对象,你的反序列化代码应该是这样的
public class RootObject
{
public string user_id { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
}
var x = JsonConvert.DeserializeObject<List<RootObject>>(resposta);
foreach (var user in x)
{
.....
}
答案 1 :(得分:0)
您需要反序列化JSON Feed。完成此操作后,您可以设置ID和文本的属性,并设置ComboBox的数据源。
查看JSON.NET进行反序列化。这篇博文应该可以帮到你:
http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx