我想知道如何获得JSON响应的总和:
我正在尝试获得Delivered的总和,因此它将是3435 + 20.
{[
{
"date": "2016-10-01",
"stats": [
{
"type": "subuser",
"name": "cooolguy@gmail.com",
"metrics": {
"blocks": 23,
"bounce_drops": 164,
"bounces": 19,
"clicks": 0,
"deferred": 412,
"delivered": 3435,
"invalid_emails": 27,
"opens": 0,
"processed": 3481,
"requests": 3675,
"spam_report_drops": 3,
"spam_reports": 0,
"unique_clicks": 0,
"unique_opens": 0,
"unsubscribe_drops": 0,
"unsubscribes": 0
}
}
]
},
{
"date": "2016-10-02",
"stats": [
{
"type": "subuser",
"name": "coolguy@gmail.com",
"metrics": {
"blocks": 0,
"bounce_drops": 0,
"bounces": 0,
"clicks": 0,
"deferred": 95,
"delivered": 20,
"invalid_emails": 0,
"opens": 0,
"processed": 0,
"requests": 0,
"spam_report_drops": 0,
"spam_reports": 0,
"unique_clicks": 0,
"unique_opens": 0,
"unsubscribe_drops": 0,
"unsubscribes": 0
}
}
]
}
]}
我会这样做吗?我试过这样做但是它不起作用我会得到错误:
其他信息:无法对null执行运行时绑定 参考
string getresponse;
getresponse = response.Body.ReadAsStringAsync().Result;
string s = getresponse;
dynamic o = JsonConvert.DeserializeObject(s);
textBox1.Text = o[0].stats[0].metrics[0].delivered;
答案 0 :(得分:1)
metrics
属性是字典,这就是您需要通过密钥访问它的值的原因。
dynamic result = JsonConvert.DeserializeObject<dynamic>(jsonString);
var res = result[0].stats[0].metrics["delivered"];
完成编辑:您必须创建类以正确反序列化该json。
public class Rootobject
{
public string date { get; set; }
public Stat[] stats { get; set; }
}
public class Stat
{
public string type { get; set; }
public string name { get; set; }
public Metrics metrics { get; set; }
}
public class Metrics
{
public int blocks { get; set; }
public int bounce_drops { get; set; }
public int bounces { get; set; }
public int clicks { get; set; }
public int deferred { get; set; }
public int delivered { get; set; }
public int invalid_emails { get; set; }
public int opens { get; set; }
public int processed { get; set; }
public int requests { get; set; }
public int spam_report_drops { get; set; }
public int spam_reports { get; set; }
public int unique_clicks { get; set; }
public int unique_opens { get; set; }
public int unsubscribe_drops { get; set; }
public int unsubscribes { get; set; }
}
之后你可以得到这样的总和:
var result = JsonConvert.DeserializeObject<List<Rootobject>>(jsonString);
var sum = result.SelectMany(x => x.stats).Sum(x => x.metrics.delivered);
答案 1 :(得分:0)
public class Metrics
{
public int delivered { get; set; }
}
public class Stat
{
public Metrics metrics { get; set; }
}
public class RootObject
{
public List<Stat> stats { get; set; }
}
...
List<RootObject> o = JsonConvert.DeserializeObject<List<RootObject>>(json);
var result = o.Sum(x => x.stats.Sum(y => y.metrics.delivered));