3

I am using Sendgrid API to send and retrieve statistics of mail sent. I want to store the response of API in database.

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

The response I will get will be like:

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

How can i extract value of each of the four fields and store them in table containing four fields?

5
  • 1
    Thanks Nagaraj S for editing my question but I want answer. Help me. Commented Jan 28, 2014 at 11:58
  • There are many ways to do this. What kind of database are you using? Commented Jan 29, 2014 at 16:44
  • So your question right now is extremely broad. It's basically "how do I interact with a mysql database using ASP.NET" and there a lot of ways to do that. What are you using to interact with the database from code right now? If you don't have any way to do that, you should do some research and choose a method, and then I can help you with the sendgrid-specific stuff. Commented Feb 5, 2014 at 16:37
  • I will be using SqlClient. This is not important. I just want to kno that how can I extract each value from reply. Commented Feb 6, 2014 at 6:16
  • 1
    This might help understand Commented Feb 23, 2014 at 18:06

4 Answers 4

4

If you do not want to create a Movie class, you can use System.Web.Script.Serialization to parse and get a dynamic object.

JavaScriptSerializer js = new JavaScriptSerializer();
dynamic movie = js.Deserialize<dynamic>(json);
Sign up to request clarification or add additional context in comments.

1 Comment

It requires System.Web.Extensions reference.
3

To read a JSON string in .NET, I recommend using Newtonsoft Json.NET.

Here is a simple example of deserializing a string into an object and reading a property:

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

Note that you will have to define the object that you want to deserialize the values into ahead of time; you can see that in this example there is a Type Movie that already exists, and the JsonConverter matches the properties in the JSON string to the properties of that type.

Comments

1

I got the answer

     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() + "";

    }
}

Comments

0

best way for problem is using

var  jtoken = JToken.Parse(string)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.