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

时间:2016-05-19 12:48:12

标签: c# json.net deserialization

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),例如List从JSON数组反序列化。也可以将JsonArrayAttribute添加到类型中以强制它从JSON数组反序列化。

     

路径'',第1行,第1位。

4 个答案:

答案 0 :(得分:1)

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

更改您的JSON以表示单个对象,或者使用一个元素反序列化List,即:

List<details> detailsList = JsonConvert.DeserializeObject<List<details>>(json);

foreach (details dets in detailsList)
{
     Console.WriteLine(dets.uuid);
}

答案 1 :(得分:0)

在json对象的末尾有一个额外的逗号。 JSON对于如何制作它非常严格。

您必须删除逗号,而不是:

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

应该是:

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

看看是否能解决问题。

答案 2 :(得分:0)

  

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

  1. details jsonconvert = JsonConvert.DeserializeObject<details>(json); jsonconvert不是List类型,因此将json数组转换为对象将失败。所以,课程详情&#39;必须实施ICollection或IList等。

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

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

答案 3 :(得分:0)

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

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