我想使用Json数据并获取uuid,将其用作登录表单



json:

[
  {
    "id": 1,
    "name": "Company",
    "lID": 1,
    "uuid": "56cd87e48528e",
  }
]

类别:

public class details
{
    public int id { get; set; }
    public string name { get; set; }
    public int lID { get; set; }
    public string uuid { get; set; }
}
private void button1_Click(object sender, EventArgs e){
    var json = new WebClient().DownloadString("url");
    details jsonconvert = JsonConvert.DeserializeObject<details>(json);
    string s = JsonConvert.SerializeObject(jsonconvert.uuid);
    /* foreach (var item in jsonconvert){
        if (textBox1.Text == s){
            Form2 secondForm = new Form2();
            secondForm.Show();
        }else{
            MessageBox.Show("Company not found.");
        }
    }*/
}

这就是结果/问题:

附加信息:无法反序列化当前JSON数组(例如[1,2,3])转换为类型"WindowsFormsApplication1.Form1+details"因为该类型需要一个JSON对象(例如{"name":"value"})正确反序列化。

若要修复此错误,请将JSON更改为JSON对象(例如{"name":"value"}),或将反序列化的类型更改为数组或实现集合接口(例如ICollection、IList)的类型,例如可以从JSON数组反序列化的List。JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。

路径",第1行,位置1。

问题是,您正在向反序列化程序提供的JSON是一个数组,即封装在[]符号中,但您正在尝试反序列化单个实例。

要么更改JSON以表示单个对象,要么用一个元素反序列化List,即:

List<details> detailsList = JsonConvert.DeserializeObject<List<details>>(json);
foreach (details dets in detailsList)
{
     Console.WriteLine(dets.uuid);
}

json对象的末尾有一个额外的逗号。JSON对它的制作方式非常严格。

你必须删除逗号,所以不是:

[ { "id": 1, "name": "Company", "lID": 1, "uuid": "56cd87e48528e", } ]

应该是:

[ { "id": 1, "name": "Company", "lID": 1, "uuid": "56cd87e48528e" } ]

看看是否修复了它。

要修复此错误,请将JSON更改为JSON对象(例如。{"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection、IList)

  1. details jsonconvert = JsonConvert.DeserializeObject<details>(json);中jsonconvert不是List类型,因此将json数组转换为对象将失败。因此,类"details"必须实现ICollection或IList等

  2. [1,2,3]没有正确的json格式。将是一种良好的做法

    {uuid:11111,数据:[1,2,3]}

我认为您可以将反序列化方法更改为

 details[] jsonconvert = JsonConvert.DeserializeObject<details[]>(json);

相关内容

  • 没有找到相关文章

最新更新