C# 无法反序列化当前JSON数组

C# 无法反序列化当前JSON数组,c#,asp.net,asp.net-web-api,asp.net-web-api2,dotnet-httpclient,C#,Asp.net,Asp.net Web Api,Asp.net Web Api2,Dotnet Httpclient,我试图从一个MVC项目调用一个Web API,以检查员工是否可以访问该应用程序。我调用一个Web API,传递员工编号和应用程序名称。如果他们有访问权,它将返回EmployeeId、AppName和AppRoll。如果他们没有访问权限,它将发回一个空的尸体 我创建了一个名为EmployeeAccess的模型,该模型具有3个属性以及获取API调用的方法。当我运行它时,我得到一个错误“无法反序列化当前JSON数组” 在上面链接的示例中,他们没有在创建JSON对象方面做任何事情。有人知道我错过了什么或

我试图从一个MVC项目调用一个Web API,以检查员工是否可以访问该应用程序。我调用一个Web API,传递员工编号和应用程序名称。如果他们有访问权,它将返回EmployeeId、AppName和AppRoll。如果他们没有访问权限,它将发回一个空的尸体

我创建了一个名为EmployeeAccess的模型,该模型具有3个属性以及获取API调用的方法。当我运行它时,我得到一个错误“无法反序列化当前JSON数组”

在上面链接的示例中,他们没有在创建JSON对象方面做任何事情。有人知道我错过了什么或做错了什么吗

HomeController(某些值为测试硬编码)

public async System.Threading.Tasks.Task

这是实际的错误。

更新-更改为使用列表使其工作

public async System.Threading.Tasks.Task<ActionResult> Index()
{
    string employeeId = "762041";
    string appName = "AppAdmin";

    var employeeAccess = new EmployeeAccess();
        List<EmployeeAccess> listEmployee = await employeeAccess.GetEmployeeAccess(employeeId, appName);

    return View();
}


public class EmployeeAccess
{
    HttpClient client = new HttpClient();

    public string AppName { get; set; }
    public string Emp { get; set; }
    public string Role { get; set; }

    internal async Task<EmployeeAccess> GetEmployeeAccess(string employeeId, string appName)
    {
        string uri = ConfigurationManager.AppSettings["ApiUri"];

        string endPoint = string.Format("api/v1/GetAppRoleForEmp?EmpID={0}&AppName={1}", employeeId, appName);

        client.BaseAddress = new Uri(uri);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = await client.GetAsync(endPoint);
        response.EnsureSuccessStatusCode();

        List<EmployeeAccess> listEmployee = new List<EmployeeAccess>();
        if (response.IsSuccessStatusCode)
        {
            listEmployee = await response.Content.ReadAsAsync<List<EmployeeAccess>>();
        }

        return listEmployee;
    }
}
public async System.Threading.Tasks.Task Index()
{
字符串employeeId=“762041”;
字符串appName=“AppAdmin”;
var employeeAccess=新employeeAccess();
List listEmployee=wait employeeAccess.GetEmployeeAccess(employeeId,appName);
返回视图();
}
公共类EmployeeAccess
{
HttpClient=新的HttpClient();
公共字符串AppName{get;set;}
公共字符串Emp{get;set;}
公共字符串角色{get;set;}
内部异步任务GetEmployeeAccess(字符串employeeId,字符串appName)
{
字符串uri=ConfigurationManager.AppSettings[“ApiUri”];
string endPoint=string.Format(“api/v1/getapprovleforemp?EmpID={0}&AppName={1}”,employeeId,AppName);
client.BaseAddress=新Uri(Uri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessage response=wait client.GetAsync(端点);
response.EnsureSuccessStatusCode();
List listEmployee=新列表();
if(响应。IsSuccessStatusCode)
{
listEmployee=wait response.Content.ReadAsAsync();
}
返回员工;
}
}

您试图将
JSON数组
反序列化为
JSON对象
,但出现错误。要避免这种情况,只需更改这一行即可

await response.Content.ReadAsAsync<EmployeeAccess>();
wait response.Content.ReadAsAsync();
进入这个

await response.Content.ReadAsAsync<List<EmployeeAccess>>();
wait response.Content.ReadAsAsync();

在得到结果后,获取第一个元素并返回对象。

您试图将
JSON数组
反序列化为
JSON对象
,但出现错误。要避免这种情况,只需更改这一行即可

await response.Content.ReadAsAsync<EmployeeAccess>();
wait response.Content.ReadAsAsync();
进入这个

await response.Content.ReadAsAsync<List<EmployeeAccess>>();
wait response.Content.ReadAsAsync();

在得到结果后,获取第一个元素并返回对象。

问题是控制器需要一个对象,但API返回的是一个带有单个条目的数组

您可以更改API,使其返回单个文档

{
    "AppName": "AppAdmin",
    "Emp": "00762041",
    "Role": "APPADMIN"
}

或者您可以更改处理方式,使其处理一个数组并获取第一个元素。

问题在于,您的控制器需要一个对象,但API正在传回一个带有单个条目的数组

您可以更改API,使其返回单个文档

{
    "AppName": "AppAdmin",
    "Emp": "00762041",
    "Role": "APPADMIN"
}

或者您可以更改处理方式,使其处理一个数组并获取第一个元素。

谢谢……我将其更改为使用列表,看起来这样可以工作。我在上面发布了更新后的代码。谢谢…我将其改为使用列表,看起来这会起作用。我在上面发布了更新的代码。