Reputation: 397
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?
Upvotes: 3
Views: 34260
Reputation: 175
best way for problem is using
var jtoken = JToken.Parse(string)
Upvotes: 0
Reputation: 4860
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);
Upvotes: 4
Reputation: 397
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() + "";
}
}
Upvotes: 1
Reputation: 9834
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.
Upvotes: 3