【发布时间】:2016-03-21 14:07:11
【问题描述】:
我从人口普查局的公共 api 获得了一个不规则的 JSON 数组。 变量名都在第一个元素中,我无法反序列化它。
http://api.census.gov/data/2014/pep/agesex?get=AGE,POP,SEX&for=us:*&DATE=7
给我这样的 JSON:
[["AGE","POP","SEX","DATE","us"],
["0","3948350","0","7","1"],
["1","3962123","0","7","1"],
["2","3957772","0","7","1"],
["3","4005190","0","7","1"],
["4","4003448","0","7","1"],
["5","4004858","0","7","1"],
["6","4134352","0","7","1"],
["7","4154000","0","7","1"]]
我可以使用以下方法成功反序列化:
var test1 = JsonConvert.DeserializeObject<String[][]>(jsonStr);
但是,我正在尝试将其反序列化为这样的类:
public class TestClass
{
public string AGE { get; set; }
public string POP { get; set; }
public string SEX { get; set; }
public string DATE { get; set; }
public string us { get; set; }
}
我正在尝试这样做:
var test2 = JsonConvert.DeserializeObject<TestClass[]>(jsonStr);
但我得到以下异常:
“Newtonsoft.Json.JsonSerializationException”类型的异常 发生在 Newtonsoft.Json.dll 中但未在用户代码中处理
附加信息:无法创建和填充列表类型 测试类。路径“[0]”,第 1 行,位置 2.
【问题讨论】:
-
我很确定您必须将其反序列化为数组数组,然后将其转换为您想要的格式。
-
这是一个例子:dotnetfiddle.net/Cr0aRL
-
@AndyJ 你的小提琴看起来很不错。愿意在此处将其转换为答案吗?
-
哇@AndyJ。我忘记了dotnetfiddle。这是一个非常好的解决方案。我同意derpirscher,您应该将其转换为答案。
-
@derpirscher 我最初写了那个小提琴作为答案,但是当我回来时已经有两个答案的代码大致相同,所以我只留下了评论。但是,由于对此有需求,我已经编写了完整的答案,其中包含更多细节和对未来自动化的建议。谢谢你的好话:)
标签: c# json serialization json.net