Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何反序列化标题名为ASP.Net Core的json列表_C#_Json_Asp.net Core_Asp.net Web Api2 - Fatal编程技术网

C# 如何反序列化标题名为ASP.Net Core的json列表

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.

在Asp.Net核心Web Api上以这种方式返回模型时:

返回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})}