我有一个来自网络服务器的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"
}
}
}
}
以上似乎是一个数组(sprints)然后是一个对象(velocityStatEntries) - >对象(例如354) - >对象(估计)和对象(已完成)。
我尝试使用JsonConvert.DeserializeObject<DataSet>(t);
进行反序列化,但我得到了一个例外:
其他信息:读取DataTable时出现意外的JSON令牌。预期的StartArray,得到了StartObject。路径'velocityStatEntries',第1行,第630位。
这是显而易见的,因为它不明白有一个数组然后还有别的东西。我可以以某种方式指定我所拥有的数据类型,而无需像类那样在代码中创建完整的结构吗?
/ donnib
答案 0 :(得分:0)
最新的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
答案 1 :(得分:0)
你有很多方法:
您可以为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
数据类型。
你可以把它们中的两个甚至三个混合成热腾腾的热汤。