使用JSON.NET将JSON的一部分反序列化为C#中的数据表 [英] Deserialize part of json to datatable in C# using JSON.NET

查看:100
本文介绍了使用JSON.NET将JSON的一部分反序列化为C#中的数据表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这可能非常简单,而我却基本缺乏理解. 我正在调用一个API,该API返回如下所示的JSON:

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

我已经花了整整一个上午的时间来阅读并尝试了许多不同的方法,老实说,我离弄清自己的需求还很近.我什至无法阅读基础货币,因为显然stuff.base是不允许的

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;

推荐答案

您应反序列化为适当的C#类,例如:

You should deserialise into a proper C# class, for example:

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

现在您可以执行以下操作:

Now you can do this:

var result = JsonConvert.DeserializeObject<Foo>(response);

现在使用那里的数据将变得很简单:

Now it will be trivial to use the data in there:

var baseCurrency = result.Base;

这篇关于使用JSON.NET将JSON的一部分反序列化为C#中的数据表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆