2016-11-07 2 views
1

Ich frage mich, wie ich die Summe der JSON-Antwort bekommen:Summe von verschachtelten Objekteigenschaften

Ich versuche, die Summe der Lieferung zu erhalten, damit es 3435 + 20.

{[ 
    { 
    "date": "2016-10-01", 
    "stats": [ 
     { 
     "type": "subuser", 
     "name": "[email protected]", 
     "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": "[email protected]", 
     "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 
     } 
     } 
    ] 
    } 
]} 

wäre Würde ich so etwas tun? Ich habe versucht, dies zu tun, aber es funktioniert nicht, dass ich den Fehler:

Additional information: Cannot perform runtime binding on a null reference

 string getresponse; 

     getresponse = response.Body.ReadAsStringAsync().Result; 

     string s = getresponse; 

     dynamic o = JsonConvert.DeserializeObject(s); 

     textBox1.Text = o[0].stats[0].metrics[0].delivered; 
+1

'o [0]' hat kein 'metrics' Eigenschaft . Schau dir deine Struktur noch einmal an. Tatsächlich haben Sie nicht einmal ein gültiges JSON, mit dem Sie beginnen können. –

+0

@MattBurland Wäre es nicht o [0] .stats [0] .metrics [0] .delivered; ?? –

Antwort

1

metrics Eigenschaft ist ein Wörterbuch, das ist, warum Sie zugreifen müssen es Werte mit einem Schlüssel.

dynamic result = JsonConvert.DeserializeObject<dynamic>(jsonString); 
var res = result[0].stats[0].metrics["delivered"]; 

Fertige Bearbeitung: Sie müssen Klassen erstellen, um diesen JSON richtig zu deserialisieren.

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; } 
    } 

Danach können Sie die Summe wie folgt zu erreichen:

var result = JsonConvert.DeserializeObject<List<Rootobject>>(jsonString); 
var sum = result.SelectMany(x => x.stats).Sum(x => x.metrics.delivered); 
+0

Stimmt das auch? –

+0

Sorry, habe das nicht gesehen, ich werde meine Antwort bald bearbeiten –

+0

@JDoe. das sollte es sein –

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)); 
Verwandte Themen