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

c#从JSON在线填充comboBox

因为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