这可能是非常简单的,对我来说是一个基本的缺乏理解。我正在调用一个API,它返回JSON,如下所示:
{
    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,
    }
}   我所要做的就是将结果返回到一个数据表中,该数据表包含列Timestamp、base、currency和rate,其中timestamp和base来自这些字段,而currency和rate来自嵌套的rates部分
我花了一早上的时间阅读,尝试了许多不同的方法,但老实说,我并没有更接近于弄清楚我需要什么。我甚至无法读取基础货币,因为显然不允许使用stuff.base
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));感谢David的回答,我的代码现在可以工作了:
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;发布于 2018-08-08 18:04:45
您应该反序列化为适当的C#类,例如:
public class Foo
{
    public string Disclaimer { get; set; }
    public string License { get; set; }
    public int Timestamp { get; set; }
    public string Base { get; set; }
    public Dictionary<string, double> Rates { get; set; }
}现在你可以这样做了:
var result = JsonConvert.DeserializeObject<Foo>(response);现在,使用其中的数据就很简单了:
var baseCurrency = result.Base;https://stackoverflow.com/questions/51743753
复制相似问题