我有来自网络服务器的以下 JSON 响应,我正在尝试将其反序列化为我可以在 C# 代码中使用的内容。
{
"sprints": [
{
"id": 377,
"sequence": 377,
"name": "Sprint 1",
"state": "CLOSED",
"linkedPagesCount": 0
},
{
"id": 354,
"sequence": 354,
"name": "Sprint 2",
"state": "CLOSED",
"linkedPagesCount": 0
}
],
"velocityStatEntries": {
"354": {
"estimated": {
"value": 19,
"text": "19.0"
},
"completed": {
"value": 15,
"text": "15.0"
}
},
"377": {
"estimated": {
"value": 21,
"text": "21.0"
},
"completed": {
"value": 19,
"text": "19.0"
}
}
}
}
上面似乎是一个数组(冲刺),然后是一个对象(velocityStatEntries)->对象(例如354)->对象(估计)和对象(已完成)。
我试图用JsonConvert.DeserializeObject<DataSet>(t);
反序列化,但我得到一个例外:
其他信息:读取数据表时意外的 JSON 令牌。预期的 StartArray,得到了 StartObject。路径"速度统计条目",第 1 行,位置 630。
这很明显,因为它不明白有一个数组,然后还有其他东西。我可以以某种方式指定我拥有什么样的数据而不在类等代码中制作完整的结构吗?
/唐尼布
最新的 json.net 版本允许您执行以下操作:
dynamic d = JObject.Parse("{number:10, str:'string', array: [1,2,3]}");
Console.WriteLine(d.number);
Console.WriteLine(d.str);
Console.WriteLine(d.array.Count);
输出:
10
string
3
此处的文档:LINQ to JSON with Json.NET
你有很多方法:
您可以获取 JSON 数组的列表和 JSON 对象的字典。
List<Dictionary<string,List<Dictionary<string,object>>>>
您可以使用对象类显式定义数据结构:
public class Sprint {
public int id;
public int sequence;
public string name;
public string state;
public int linkedPagesCount;
}
public class Sth {
public Sprint[] sprints;
...
}
new JavaScriptSerializer().Deserialize<Sth>(mySthVariable)
您可以使用dynamic
数据类型。
您可以将其中两个甚至所有三个混合成热气腾腾的编程汤。