【问题标题】:Deserialize Json usinc C# , web api, asp.net mvc反序列化 Json usinc C#, web api, asp.net mvc
【发布时间】:2021-12-17 19:01:25
【问题描述】:

这是我的 JSON 数据示例,从 this website 获得

[
  {
    "date": "2021-11-03T00:00:00.000Z",
    "currencies": [
      {
        "code": "AED",
        "quantity": 10,
        "rateFormated": "8.6246",
        "diffFormated": "0.0032",
        "rate": 8.6246,
        "name": "არაბეთის გაერთიანებული საამიროების დირჰამი",
        "diff": -0.0032,
        "date": "2021-11-02T17:44:59.825Z",
        "validFromDate": "2021-11-03T00:00:00.000Z"
      },
      {
        "code": "AMD",
        "quantity": 1000,
        "rateFormated": "6.6368",
        "diffFormated": "0.0036",
        "rate": 6.6368,
        "name": "სომხური დრამი",
        "diff": 0.0036,
        "date": "2021-11-02T17:44:59.825Z",
        "validFromDate": "2021-11-03T00:00:00.000Z"
      }
    ]
  }
]

和我的班级 -

public class CurrencyDTO
{
    public string code { get; set; }
    public int quantity { get; set; }
    public string rateFormated { get; set; }
    public string diffFormated { get; set; }
    public double rate { get; set; }
    public string name { get; set; }
    public double diff { get; set; }
    public DateTime date { get; set; }
    public DateTime validFromDate { get; set; }
}

public class Root
{
    public DateTime date { get; set; }
    public List<CurrencyDTO> currencies { get; set; }
}

当我试图为我的网站反序列化它时,模型正在显示但没有数据(见图)

索引法

                var webClient = new WebClient();
                HttpResponseMessage response = client.GetAsync(BaseURL).Result;
                List<CurrencyDTO> ct = new List<CurrencyDTO>();
                if (response.IsSuccessStatusCode)
                {
                    String rawJSON = webClient.DownloadString("https://nbg.gov.ge/gw/api/ct/monetarypolicy/currencies/ka/json");
                    ct = JsonConvert.DeserializeObject<List<CurrencyDTO>>(rawJSON);
                }
                return View(ct);

问题是我的课程还是我试图反序列化它的方式?

【问题讨论】:

  • 调试代码时,您是否看到ct 变量中的任何数据?可以分享一下查看代码吗?
  • ct = JsonConvert.DeserializeObject>(rawJSON);
  • 我正在尝试添加调试点,但没有任何反应
  • 这给了我一个错误
  • 检查 JSON 的第一行,它不是一个数组,而是一个类,该类在名为 date 的属性中具有日期,在名为 currencies 的属性中具有数组。所以你应该使用在反序列化中具有这些属性的类Root

标签: c# asp.net json asp.net-mvc webapi


【解决方案1】:

使用下面的代码,希望你能得到数据:

var webClient = new WebClient();
HttpResponseMessage response = client.GetAsync(BaseURL).Result;
List<CurrencyDTO> ct = new List<CurrencyDTO>();
if (response.IsSuccessStatusCode)
{
    String rawJSON = webClient.DownloadString("https://nbg.gov.ge/gw/api/ct/monetarypolicy/currencies/ka/json");
    var data = JsonConvert.DeserializeObject<List<Root>>(rawJSON);
    ct = data.SelectMany(c => c.currencies).ToList();
}
return View(ct);

【讨论】:

  • data.currencies 有错误
  • 你的DeserializeObject&lt;List&lt;Root&gt;&gt; 应该是DeserializeObject&lt;Root&gt;
  • @namizo 查看我对这个问题的评论,了解如何解决这个问题以及对问题 cmets 的解释。
  • “因为在 json 对象中它不是正确的日期时间格式”是什么意思?这是一个完美的日期格式。 dotnetfiddle.net/9f9tSV
  • 我已经编辑了 ct = data.SelectMany(c => c.currencies).ToList();这条线。现在检查。
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多