C# 无法反序列化当前JSON数组
我试图从一个MVC项目调用一个Web API,以检查员工是否可以访问该应用程序。我调用一个Web API,传递员工编号和应用程序名称。如果他们有访问权,它将返回EmployeeId、AppName和AppRoll。如果他们没有访问权限,它将发回一个空的尸体 我创建了一个名为EmployeeAccess的模型,该模型具有3个属性以及获取API调用的方法。当我运行它时,我得到一个错误“无法反序列化当前JSON数组” 在上面链接的示例中,他们没有在创建JSON对象方面做任何事情。有人知道我错过了什么或做错了什么吗 HomeController(某些值为测试硬编码)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对象方面做任何事情。有人知道我错过了什么或
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"
}
或者您可以更改处理方式,使其处理一个数组并获取第一个元素。谢谢……我将其更改为使用列表,看起来这样可以工作。我在上面发布了更新后的代码。谢谢…我将其改为使用列表,看起来这会起作用。我在上面发布了更新的代码。