c# - 我如何反序列化标题名称为 ASP.Net Core 的 json 列表
问题描述
当我在 Asp.Net Core Web Api 上以这种方式返回模型时:
return Ok(menuBusiness.GetMenuList());
一切正常。但是当我用字典名称或列表标题编写代码时:
return Ok(new { menuList = menuBusiness.GetMenuList() });
我收到一个错误:
System.AggregateException: '发生一个或多个错误。(无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1
我无法读取json。这是我读取 json 的代码:
public ViewViewComponentResult Invoke() {
List < TitleViewModel > allmenulist = new List < TitleViewModel > ();
var client = httpClientFactory.CreateClient("inventorio");
client.DefaultRequestHeaders.Add("Token", HttpContext.Request.Cookies["Token"]);
var response = client.GetAsync(client.BaseAddress + "/title/gettitlesbycompanyid");
response.Wait();
var result = response.Result;
if (result.IsSuccessStatusCode) {
var readTask = result.Content.ReadAsAsync < List < TitleViewModel >> ();
readTask.Wait(); // I am getting the error this line
allmenulist = readTask.Result;
}
return View(allmenulist);
}
当我尝试使用异步方法时,我没有收到错误,但 json 看起来是空的。
解决方案
您可以将响应读取为动态然后读取它的名称属性。
public ViewViewComponentResult Invoke()
{
List<object> allmenulist = new List<object>();
var client = httpClientFactory.CreateClient("inventorio");
client.DefaultRequestHeaders.Add("Token", HttpContext.Request.Cookies["Token"]);
var response = client.GetAsync(client.BaseAddress + "/title/gettitlesbycompanyid");
response.Wait();
var result = response.Result;
if (result.IsSuccessStatusCode)
{
var d = result.Content.ReadAsAsync<dynamic>();
d.Wait(); // I am getting the error this line
allmenulist = d.Result.name as List<TitleViewModel>;
}
return View(allmenulist);
}
推荐阅读
- neo4j - 如何在c#neo4j驱动中监听neo4j触发事件
- python - 在 cython 包装器中使用 scikit-sparse 的 cholmod?
- python - 表单没有响应提交
- javascript - axios 和 vue cal (scheluder) 的问题数据恢复
- java - 如何使用正则表达式,Java查找换行后开始的单词?
- java - 使用spring boot根据特定条件运行cron作业。下面提到的java代码有什么问题
- python - 带有 for 循环的 max() 函数
- javascript - 调度不是减速器中的功能
- android - 通话意图后唤醒锁丢失
- ansible - Ansible 从 vmware_host_vmhba_facts 打印特定字段