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 在线填充组合框的主要内容,如果未能解决你的问题,请参考以下文章

使用大量项目填充组合框

在 C# 中填充组合框的最快方法是啥? [关闭]

使用本地 JSON 数据填充 ExtJS 3.4 组合框

ExtJs:从 Json 响应中填充 ComboBox

如何使用 json 函数用数据库填充组合框?

如何在 C# 上使用数据库数据获取组合框上的范围值