【问题标题】:C# populate comboBox from JSON onlineC# 从 JSON 在线填充组合框
【发布时间】: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,我什么都看不到,告诉我们你做了什么。
  • 在您的尝试中什么不起作用?编译时错误?例外?不相关的结果?
  • 我更新了代码和返回的错误。

标签: c# json winforms


【解决方案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 编辑​​添加示例代码之前发布的。
    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多