当前位置: 首页 > 知识库问答 >
问题:

在WindowsForms中从api下载的JSON的问题

沙柏
2023-03-14

我有一个从bank API下载JSON的问题。我在做自动取款机。

        private void get_response()
    {
        WebClient wp = new WebClient();
        string url = "http://api.nbp.pl/api/exchangerates/tables/a/?format=json";
        var response = wp.DownloadString(url);
        var jsonData = System.Text.Json.JsonSerializer.Deserialize<List<Rootobject>>(response);
        Console.WriteLine(jsonData[0].rates.ToString());//ATM.Rates+Rate[]
        Console.WriteLine(jsonData[0].rates[1].currency.ToString());//USD Dolar
        get_data(response);
    }

我找了很多,但我没有找到我的问题的答案。我只需要使用List,但我不知道如何使用它并将其再次转换为json,只知道rates表。我的班级:

        public class Rootobject
    {
        public Class1[] Property1 { get; set; }
    }

    public class Class1
    {
        public string table { get; set; }
        public string no { get; set; }
        public string effectiveDate { get; set; }
        public Rate[] rates { get; set; }
    }

    public class Rate
    {
        public string currency { get; set; }
        public string code { get; set; }
        public float mid { get; set; }
    }

我需要在我的应用程序中显示率表,但我不知道如何在JSON字符串中输入率值,因为当我显示响应时,这会发生。

        private void get_data(string response)
    {
        dataGridView.Rows.Clear();
        DataTable dataTable = (DataTable)JsonConvert.DeserializeObject(response, (typeof(DataTable)));
        dataGridView.DataSource = dataTable;
    }

共有1个答案

叶茂才
2023-03-14

json是:

[
    {
        "table": "A",
        "no": "083/A/NBP/2021",
        "effectiveDate": "2021-04-30",
        "rates": [
            {
                "currency": "bat (Tajlandia)",
                "code": "THB",
                "mid": 0.1211
            },
            {
                "currency": "dolar amerykański",
                "code": "USD",
                "mid": 3.7746
            },
            (...)
     }
]

它是一个包含单个对象的数组。下面是我的映射:

public class RateData
{
    public List<Rate> Rates {get; set;}
}

public class Rate
{
    public string Currency { get;set;}
    public string Code {get; set;}
    public decimal Mid {get; set;}
}

测试代码:

var options = new JsonSerializerOptions {
    PropertyNameCaseInsensitive = true
};
var list = JsonSerializer.Deserialize<List<RateData>>(json, options);

var single = list.Single(); // throws if there are more
foreach(var rate in single.Rates)
{
    Console.WriteLine($"{rate.Currency}, {rate.Code}, {rate.Mid}");
}

输出:

bat (Tajlandia), THB, 0.1211
dolar amerykański, USD, 3.7746
dolar australijski, AUD, 2.9323
dolar Hongkongu, HKD, 0.4862
...

如何将列表转换为DataTable

但我认为这可能行得通:

dataGridView.DataSource = single.Rates;

如果不是,那么我认为这是可行的:

var data = single.Rates
    .Select( r => new { 
        Currency = r.Currency, 
        Code = r.Code, 
        Mid = r.Mid
        });
dataGridView.DataSource = data;

(基于绑定对象DataGridView C#)

 类似资料:
  • 它在RESTSharp中返回的JSON如下所示。 如何在result下创建所有键的C#列表或数组?我不能用JSON.NET序列化对象,因为随着时间的推移,可能会添加额外的键。

  • 问题内容: 我的API控制器返回的是csv文件,如下所示: 我的angularjs将发送和接收csv文件如下所示: 在chrome中,它将下载一个名为,但没有文件扩展名的文件。该文件的内容为。 在IE10中,没有下载任何内容。 我该怎么做才能解决此问题? 问题答案: 像这样尝试:

  • 问题内容: 是否有一个很好的示例显示如何查询服务器并下载响应(JSON或XML)? 问题答案: 这应该可以解决问题

  • 我想下载json-lib-2.3-jdk15.jar。我发现常春藤没有分类器标记,所以我使用maven标记,下面是常春藤xml 和ivysetting.xml 但我仍然无法下载。似乎m:分类器不起作用。对此有什么建议吗?谢谢 我终于找到了根本原因。我不应该使用 我应该使用 另一件事,在我的例子中,我在“artifact”标记中添加了“conf”distribute,这将导致jar下载失败。所以不要

  • 本文向大家介绍WPF中引入WindowsForms控件的方法,包括了WPF中引入WindowsForms控件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了WPF中引入WindowsForms控件的方法。分享给大家供大家参考,具体如下: 环境: [1]WindowsXP with SP3 [2]VS2008 with SP1 正文: Step1:在现有工程中引入Windows For