反序列化 Json usinc C#, web api, asp.net mvc
Posted
技术标签:
【中文标题】反序列化 Json usinc C#, web api, asp.net mvc【英文标题】:Deserialize 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
。
【参考方案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<List<Root>>
应该是DeserializeObject<Root>
@namizo 查看我对这个问题的评论,了解如何解决这个问题以及对问题 cmets 的解释。
“因为在 json 对象中它不是正确的日期时间格式”是什么意思?这是一个完美的日期格式。 dotnetfiddle.net/9f9tSV
我已经编辑了 ct = data.SelectMany(c => c.currencies).ToList();这条线。现在检查。以上是关于反序列化 Json usinc C#, web api, asp.net mvc的主要内容,如果未能解决你的问题,请参考以下文章