正确迭代json数组

时间:2018-03-29 14:34:01

标签: c# json

我正在尝试解析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并从中获取键值的正确方法是什么。

1 个答案:

答案 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