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)
-
在
details jsonconvert = JsonConvert.DeserializeObject<details>(json);
中jsonconvert不是List类型,因此将json数组转换为对象将失败。因此,类"details"必须实现ICollection或IList等 -
[1,2,3]没有正确的json格式。将是一种良好的做法
{uuid:11111,数据:[1,2,3]}
我认为您可以将反序列化方法更改为
details[] jsonconvert = JsonConvert.DeserializeObject<details[]>(json);