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位。
答案 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)
在details jsonconvert = JsonConvert.DeserializeObject<details>(json);
jsonconvert不是List类型,因此将json数组转换为对象将失败。所以,课程详情&#39;必须实施ICollection或IList等。
[1,2,3]我没有正确的json格式。好的做法将是
{uuid:11111,数据:[1,2,3]}
答案 3 :(得分:0)
我认为您可以将反序列化方法更改为
details[] jsonconvert = JsonConvert.DeserializeObject<details[]>(json);