C# 从 JSON 在线填充组合框
Posted
技术标签:
【中文标题】C# 从 JSON 在线填充组合框【英文标题】:C# populate comboBox from JSON online 【发布时间】:2015-07-31 13:21:17 【问题描述】:我需要在线从 JSON 填充一个组合框。它是一个 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 是组合框 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 数组反序列化。 JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组反序列化。 路径'',第 1 行,位置 1。
【问题讨论】:
你尝试了哪些方法?你想在这里展示吗? 你应该把它解析为对象然后使用它!有哪些方法?除了上面的 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)
.....
【讨论】:
【参考方案2】:您需要反序列化 JSON 提要。完成此操作后,您可以设置 ID 和 Text 的属性,并设置 ComboBox 的数据源。
查看JSON.NET 进行反序列化。这篇博文应该对您有所帮助:
http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx
【讨论】:
我的答案是在 OP 编辑添加示例代码之前发布的。以上是关于C# 从 JSON 在线填充组合框的主要内容,如果未能解决你的问题,请参考以下文章