我有一个来自Visistat.com的API的Json字符串,我正试图用Json.Net在c#中解析。Json字符串看起来像:
[
["date", "uniques"],
["2014-04-15", "613"],
["2014-04-16", "631"],
["2014-04-17", "593"],
["2014-04-18", "466"],
["2014-04-19", "305"],
["2014-04-20", "294"],
["2014-04-21", "795"],
["2014-04-22", "666"],
["2014-04-23", "625"],
["2014-04-24", "571"],
["2014-04-25", "506"],
["2014-04-26", "342"],
["2014-04-27", "351"],
["2014-04-28", "720"],
["2014-04-29", "606"],
["2014-04-30", "588"],
["2014-05-01", "508"],
["2014-05-02", "545"],
["2014-05-03", "345"],
["2014-05-04", "379"],
["2014-05-05", "833"],
["2014-05-06", "635"],
["2014-05-07", "596"],
["2014-05-08", "530"],
["2014-05-09", "539"],
["2014-05-10", "322"],
["2014-05-11", "290"],
["2014-05-12", "734"],
["2014-05-13", "684"],
["2014-05-14", "555"],
["2014-05-15", "511"]
]
我已经创建了一个对象来将它反序列化为:
public class DateUnique
{
public DateTime date { get; set; }
public int uniques { get; set; }
}
我试图解析Json字符串与:
List<DateUnique> dateuniques = JsonConvert.DeserializeObject<List<DateUnique>>(json);
然后得到这个Exception:
无法将当前JSON数组(例如[1,2,3])反序列化为'VisiStatSystem '类型。DateUnique’,因为该类型需要一个JSON对象(例如{"name":"value"})来正确反序列化。要修复此错误,要么将JSON更改为JSON对象(例如{"name":"value"}),要么将反序列化类型更改为数组或实现集合接口的类型(例如ICollection, IList),例如可以从JSON数组反序列化的List。还可以将JsonArrayAttribute添加到类型中,以强制它从JSON数组进行反序列化。路径'[0]',第一行,位置2。
我在Json.net文档中没有看到任何演示如何反序列化Json字符串的示例,该字符串看起来像VisiStat Api返回的字符串。任何帮助,感谢!
您正在获得此错误,因为您的JSON是数组的数组,而不是对象的数组,而您试图解析它,如果它是后者。你需要一些特殊的处理将它反序列化成一个List<DateUnique>
。
JArray array = JArray.Parse(json);
List<DateUnique> list = new List<DateUnique>(array.Count - 1);
for (int i = 1; i < array.Count; i++)
{
list.Add(new DateUnique
{
date = DateTime.ParseExact(array[i][0].ToString(),
"yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture),
uniques = int.Parse(array[i][1].ToString())
});
}