如何在C#中解析这个http响应

时间:2016-11-04 23:26:37

标签: c# json

我如何使用C#解析此响应?

[  
   {  
      "date":"2016-10-01",
      "stats":[  
         {  
            "type":"subuser",
            "name":"coolguy@yahoo.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@yahoo.com",
            "metrics":{  
               "blocks":0,
               "bounce_drops":0,
               "bounces":0,
               "clicks":0,
               "deferred":95,
               "delivered":0,
               "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
            }
         }
      ]
   }
]

1 个答案:

答案 0 :(得分:3)

使用JsonConvert将其反序列化为dynamic,如下所示,或创建匹配的类结构并将其反序列化为。

using Newtonsoft.Json;
.....

string json = File.ReadAllText("data.txt");
var deserializedData = JsonConvert.DeserializeObject<dynamic>(json);

使用json2csharp您的课程应如下所示:

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

public class Stat
{
    public string type { get; set; }
    public string name { get; set; }
    public Metrics metrics { get; set; }
}

public class RootObject
{
    public string date { get; set; }
    public List<Stat> stats { get; set; }
}

可以改进这些生成的类 - 例如,不将date存储在string中,而是DateTime

string json = File.ReadAllText("data.txt");
RootObject deserializedData = JsonConvert.DeserializeObject<RootObject>(json);