我正在尝试解析json数组并从中获取值但面临一些问题。
我得到了我的json:
[{
"ID1":"1",
"ID2":"2",
"ID3":"3",
"ID4":"4"
},
{
"ID1":"5",
"ID2":"6",
"ID3":"7",
"ID4":"8"
}]
密钥ID1,ID2等未修复。对于前者,我也可以将我的json作为:
[{
"ID1":"1",
"ID2":"2"
},
{
"ID1":"5",
"ID2":"6"
}]
或者也可以有更多的键,即它的动态,所以我不能创建一个模型并将我的json映射到它。
我试图通过使用以下代码反序列化并获取数据。:
public IActionResult GetData(string data)
{
//here data is my json
List<string> myList = JsonConvert.DeserializeObject<List<string>>(data);
foreach (string s in myList)
{
//get values here
}
return Json("");
}
但是上面反序列化时给出了错误:
Newtonsoft.Json.JsonReaderException:&#39;&gt;解析值时遇到意外的字符:{。路径&#39;&#39;,第1行,第2位。&#39;
所以我想知道循环这个json并从中获取键值的正确方法是什么。
答案 0 :(得分:1)
您的JSON是 object 的列表,您的问题是您正在尝试反序列化为 string 列表。这显然不会起作用。
相反,您希望反序列化为对象列表,并且由于您的对象键更改了您可以使用的最佳内容,因此Dictionary<string, string>
:
var myList = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(data);
请记住,您发布的JSON是Dictionary<string, string>
,但只要您在该JSON中获得整数或bool,就应该更改为Dictionary<string, object>
小提琴here