【问题标题】:How can I parse a JSON string using ASP.NET?如何使用 ASP.NET 解析 JSON 字符串?
【发布时间】:2014-01-28 11:38:26
【问题描述】:

我正在使用 Sendgrid API 发送和检索已发送邮件的统计信息。我想将 API 的响应存储在数据库中。

protected void btnBounces_Click(object sender, EventArgs e)
{
    try
    {
        string url = "https://api.sendgrid.com/api/bounces.get.json";
        GetResult(url);
    }
    catch (Exception ex)
    {
        lblError.Text = ex.Message.ToString();
    }
}
 public void GetResult(string url)
{
    string parameters = "api_user=xxxx&api_key=xxxx&date=1&start_date="+txtStartDate.Text+"&end_date="+txtEndDate.Text;
    // Start the request
    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
    req.Method = "POST";
    req.ContentType = "application/x-www-form-urlencoded";
    StreamWriter streamWriter = new StreamWriter(req.GetRequestStream());
    streamWriter.Write(parameters);
    streamWriter.Flush();
    streamWriter.Close();
    // Get the response
    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    StreamReader streamReader = new StreamReader(res.GetResponseStream());
    string result = streamReader.ReadToEnd();
}

我会得到这样的回应:

[
  {
    "status": "4.0.0",
    "created": "2011-09-16 22:02:19",
    "reason": "Unable to resolve MX host sendgrid.ne",
    "email": "esting@sendgrid.ne"
  },
  {
    "status": "4.0.0",
    "created": "2011-09-19 17:47:15",
    "reason": "Connection timed out",
    "email": "rawest@gmail.co"
  }
]

如何提取四个字段中的每一个的值并将它们存储在包含四个字段的表中?

【问题讨论】:

  • 感谢 Nagaraj S 编辑我的问题,但我想要回答。帮助我。
  • 有很多方法可以做到这一点。你用的是什么数据库?
  • 所以你现在的问题非常广泛。它基本上是“我如何使用 ASP.NET 与 mysql 数据库进行交互”,并且有很多方法可以做到这一点。你现在用什么从代码中与数据库交互?如果你没有办法做到这一点,你应该做一些研究并选择一种方法,然后我可以帮助你处理特定于 sendgrid 的东西。
  • 我将使用 SqlClient。这并不重要。我只是想知道如何从回复中提取每个值。

标签: asp.net json sendgrid


【解决方案1】:

如果不想创建Movie类,可以使用System.Web.Script.Serialization解析得到dynamic对象。

JavaScriptSerializer js = new JavaScriptSerializer();
dynamic movie = js.Deserialize<dynamic>(json);

【讨论】:

  • 它需要 System.Web.Extensions 参考。
【解决方案2】:

要在 .NET 中读取 JSON 字符串,我建议使用 Newtonsoft Json.NET

这是一个将字符串反序列化为对象并读取属性的简单示例:

string json = @"{
  'Name': 'Bad Boys',
  'ReleaseDate': '1995-4-7T00:00:00',
  'Genres': [
    'Action',
    'Comedy'
  ]
}";

Movie m = JsonConvert.DeserializeObject<Movie>(json);

string name = m.Name;
// Bad Boys

请注意,您必须提前定义要将值反序列化为的对象;可以看到在这个例子中有一个TypeMovie已经存在,JsonConverter将JSON字符串中的属性与该类型的属性进行匹配。

【讨论】:

    【解决方案3】:

    我得到了答案

         public class BouncesAndBlocks
    {
        public string status { get; set; }
        public string created { get; set; }
        public string email { get; set; }
        public string reason { get; set; }
    }
         protected void btnBounces_Click(object sender, EventArgs e)
    {
        string url = "https://api.sendgrid.com/api/bounces.get.json";
        string JS = GetResult(url);
        List<BouncesAndBlocks> res = (List<BouncesAndBlocks>)JsonConvert.DeserializeObject(JS, typeof(List<BouncesAndBlocks>));
        foreach (var item in res)
        {
            //Store in database
            lbl.Text = "Date:" + item.created.ToString() + "    Status:" + item.status.ToString() + "     Email:" + item.email.ToString() + "       Message:" + item.reason.ToString() + "";
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      相关资源
      最近更新 更多