我已经尝试了两天,借助于其他网站上类似问题的帮助,将以下json数据反序列化为类,并可能会变得脑残。
我有这个json数据(长度很长,抱歉),并且正在尝试从'Values'数组中获取'value'数字:
{
"metadata": {
"columnGrouping": [
"area",
"metricType",
"period",
"valueType"
],
"rowGrouping": []
},
"columns": [
{
"area": {
"identifier": "E31000040",
"label": "Gtr Manchester Fire",
"altLabel": "Gtr Manchester Fire",
"isSummary": false
},
"metricType": {
"identifier": "948",
"label": "Accidental dwelling fires",
"altLabel": "Accidental dwelling fires",
"isSummary": false
},
"period": {
"identifier": "fq_Q1_2013_14",
"label": "2013/14 Q1",
"altLabel": "2013/14 Q1",
"isSummary": false
},
"valueType": {
"identifier": "raw",
"label": "Raw value",
"isSummary": false
}
},
{
"area": {
"identifier": "E31000040",
"label": "Gtr Manchester Fire",
"altLabel": "Gtr Manchester Fire",
"isSummary": false
},
"metricType": {
"identifier": "948",
"label": "Accidental dwelling fires",
"altLabel": "Accidental dwelling fires",
"isSummary": false
},
"period": {
"identifier": "fq_Q2_2013_14",
"label": "2013/14 Q2",
"altLabel": "2013/14 Q2",
"isSummary": false
},
"valueType": {
"identifier": "raw",
"label": "Raw value",
"isSummary": false
}
},
{
"area": {
"identifier": "E31000040",
"label": "Gtr Manchester Fire",
"altLabel": "Gtr Manchester Fire",
"isSummary": false
},
"metricType": {
"identifier": "948",
"label": "Accidental dwelling fires",
"altLabel": "Accidental dwelling fires",
"isSummary": false
},
"period": {
"identifier": "fq_Q3_2013_14",
"label": "2013/14 Q3",
"altLabel": "2013/14 Q3",
"isSummary": false
},
"valueType": {
"identifier": "raw",
"label": "Raw value",
"isSummary": false
}
},
{
"area": {
"identifier": "E31000040",
"label": "Gtr Manchester Fire",
"altLabel": "Gtr Manchester Fire",
"isSummary": false
},
"metricType": {
"identifier": "948",
"label": "Accidental dwelling fires",
"altLabel": "Accidental dwelling fires",
"isSummary": false
},
"period": {
"identifier": "fq_Q4_2013_14",
"label": "2013/14 Q4",
"altLabel": "2013/14 Q4",
"isSummary": false
},
"valueType": {
"identifier": "raw",
"label": "Raw value",
"isSummary": false
}
}
],
"rows": [
{
"values": [
{
"source": 515.0,
"value": 515.0,
"formatted": "515",
"format": "#,##0",
"publicationStatus": "Published"
},
{
"source": 264.0,
"value": 264.0,
"formatted": "264",
"format": "#,##0",
"publicationStatus": "Published"
},
{
"source": 254.0,
"value": 254.0,
"formatted": "254",
"format": "#,##0",
"publicationStatus": "Published"
},
{
"source": 455.0,
"value": 455.0,
"formatted": "455",
"format": "#,##0",
"publicationStatus": "Published"
}
]
}
]
}
我使用http://json2csharp.com/创建了类,并尝试了以下方法:
RootObject ro = JsonConvert.DeserializeObject<RootObject>(json_data);
并且。
Value [] vo = JsonConvert.DeserializeObject<Value[]>(json_data);
并且
dynamic result = JsonConvert.DeserializeObject(json_data);
also
JavaScriptSerializer jss = new JavaScriptSerializer();
Value [] thisval = jss.Deserialize<Value[]>(json_data);
除此之外,正确的方法是将其信息提取到类中,这样我就可以对它们进行操作。一旦反序列化,调用数据的示例将会很有帮助。 我主要拥有的类是:
public class Value
{
public double source { get; set; }
public double value { get; set; }
public string formatted { get; set; }
public string format { get; set; }
public string publicationStatus { get; set; }
}
public class Row
{
public List<Value> values { get; set; }
}
public class RootObject
{
public Metadata metadata { get; set; }
public List<Column> columns { get; set; }
public List<Row> rows { get; set; }
}
RootObject ro = JsonConvert.DeserializeObject<RootObject>(json_data);
是可行的(使用空的Metadata
和Column
类)。 - DavidG