This is probably very simple and a basic lack of understanding on my part. I am calling an API which returns a JSON as below:
{
disclaimer: "https://openexchangerates.org/terms/",
license: "https://openexchangerates.org/license/",
timestamp: 1449877801,
base: "USD",
rates: {
AED: 3.672538,
AFN: 66.809999,
ALL: 125.716501,
AMD: 484.902502,
ANG: 1.788575,
AOA: 135.295998,
ARS: 9.750101,
AUD: 1.390866,
}
}
All I want to do is return the result into a datatable which has the columns Timestamp, base, currency and rate where timestamp and base are from those fields and the currency and rate are from the nested rates section
I've spent the morning reading up and trying many different ways and to be honest I am no closer to figuring out what I need. I can't even read the base currency because obviously stuff.base isn't allowed
var response = httpClient.GetStringAsync(new Uri(url)).Result;
JObject jsonResponse = JObject.Parse(response);
CurrentContext.Message.Display(response);
dynamic stuff = JsonConvert.DeserializeObject(response);
var timestamp = stuff.timestamp;
CurrentContext.Message.Display("TIMESTAMP IS :"+ timestamp);
var basecur = stuff.base;
CurrentContext.Message.Display("TIMESTAMP IS :" + basecur);
DataTable outputData = new DataTable();
outputData.Columns.Add("timestamp", typeof(System.String));
outputData.Columns.Add("basecurrency", typeof(System.String));
outputData.Columns.Add("currency", typeof(System.String));
outputData.Columns.Add("rate", typeof(System.Int16));
Thank you for the answer from David, my code now works:
var response = httpClient.GetStringAsync(new Uri(url)).Result;
var result = JsonConvert.DeserializeObject<Deserialize>(response);
DataTable outputData = new DataTable();
outputData.Columns.Add("timestamp", typeof(System.String));
outputData.Columns.Add("basecurrency", typeof(System.String));
outputData.Columns.Add("currency", typeof(System.String));
outputData.Columns.Add("rate", typeof(System.Decimal));
foreach (KeyValuePair<string, double> entry in result.Rates)
{
outputData.Rows.Add(result.Timestamp,result.Base,entry.Key,entry.Value);
}
return outputData;