C# 如何反序列化标题名为ASP.Net Core的json列表
在Asp.Net核心Web Api上以这种方式返回模型时:C# 如何反序列化标题名为ASP.Net Core的json列表,c#,json,asp.net-core,asp.net-web-api2,C#,Json,Asp.net Core,Asp.net Web Api2,在Asp.Net核心Web Api上以这种方式返回模型时: 返回Ok(menuBusiness.GetMenuList()) 一切都很好。但当我用字典名或列表标题编写代码时: 返回Ok(新的{menuList=menuBusiness.GetMenuList()}) 我得到一个错误: System.AggregateException:'发生了一个或多个错误。(不能 将当前JSON对象(例如{“name”:“value”})反序列化为类型 'System.Collections.Generic.
返回Ok(menuBusiness.GetMenuList())代码>
一切都很好。但当我用字典名或列表标题编写代码时:
返回Ok(新的{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);
}
公共视图组件结果调用(){
Listallmenulist=新列表();
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(结果。IsSuccessStatusCode){
var readTask=result.Content.ReadAsAsync>();
readTask.Wait();//我在这一行得到了错误信息
allmenulist=readTask.Result;
}
返回视图(allmenulist);
}
当我尝试使用异步方法时,没有收到错误,但json看起来是空的。您可以将响应作为动态读取,然后读取它的name属性
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);
}
公共视图组件结果调用()
{
List allmenulist=新列表();
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(结果。IsSuccessStatusCode)
{
var d=result.Content.ReadAsAsync();
d、 Wait();//我在这一行得到了错误信息
allmenulist=d.Result.name作为列表;
}
返回视图(allmenulist);
}
听起来结果不是数组,而是单个json对象。当你说“我看不懂json”是什么意思?使用result.Content.ReadAsStringAsync()
来看看你收到了什么。另外,你真的应该让这个方法异步,这样你就可以等待
异步调用。你能分享一下你的/title/gettitlesbycompanyid
方法和你的模型吗?当我试着这样读json时,@Crowcoder:code
[{“titleId”:1,“companyId”:1},{“titleId”:2,“companyId”:1}]我没有问题。但是如果json是这样的:code
{titleList:[{“titleId”:1,“companyId”:1},{“titleId”:2,“companyId”:1}例如,我如何读取json,给该方法一个“titleList”参数。@Rena public IActionResult GetTitlesByCompanyId(){List title=titleBusiness.GetTitleListByCompanyId(usersBusiness.GetByToken(HeaderToken.CompanyId));if(title.Count==0){return BadRequest(new{message=“no title”});}else{return Ok(title);//我想要的是:return Ok(new{titleList=title})}