首页 > 解决方案 > 我如何反序列化标题名称为 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 看起来是空的。

标签: c#jsonasp.net-coreasp.net-web-api2

解决方案


您可以将响应读取为动态然后读取它的名称属性。

        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);
    }

推荐阅读