c#从JSON在线填充comboBox
本文关键字:填充 comboBox 在线 JSON | 更新日期: 2023-09-27 18:05:56
我需要从JSON在线填充一个comboBox。这是一个用c#编写的WindowsForms项目。PHP页面返回以下字符串:
[{"user_id":"1","first_name":"Joao","last_name":"Silva"},{"user_id":"2","first_name":"Maria","last_name":"Santos"},{"user_id":"3","first_name":"Rosa","last_name":"Costa"}]
user_id将是comboBox ID, first_name + last_name将是文本。我试了很多方法,但没有一个奏效。任何建议吗?
我的一个尝试:
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);
}
错误:Newtonsoft.Json。JsonSerializationException:无法将当前JSON数组(例如[1,2,3])反序列化为类型'NB_WBF_Demo。NB_WBF_Demo+RootObject',因为该类型需要一个JSON对象(例如{"name":"value"})来正确反序列化。要修复此错误,要么将JSON更改为JSON对象(例如{"name":"value"}),要么将反序列化类型更改为数组或实现集合接口的类型(例如ICollection, IList),例如可以从JSON数组反序列化的List。还可以将JsonArrayAttribute添加到类型中,以强制它从JSON数组进行反序列化。路径",第一行,位置1
因为json是一个数组/列表,而不是对象,所以反序列化代码应该是这样的
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)
{
.....
}
您需要对JSON提要进行反序列化。完成这些之后,您可以设置ID和Text的属性,并设置ComboBox的数据源。
看JSON。. NET用于反序列化。这篇博文应该能帮到你:
http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx