C# 无法使用restsharp将json数组反序列化为对象
以下是我的JSON响应:C# 无法使用restsharp将json数组反序列化为对象,c#,json,restsharp,C#,Json,Restsharp,以下是我的JSON响应: [ { "Id": 25, "CreateDate": "2020-09-26T12:25:27.917", "Title": "Second TV Repair", "categoryTitle": "Tv Repair", "FirstName": "
[
{
"Id": 25,
"CreateDate": "2020-09-26T12:25:27.917",
"Title": "Second TV Repair",
"categoryTitle": "Tv Repair",
"FirstName": "Sample FirsName",
"LastName": "Sample LastName"
} ]
这是我的反序列化程序类:
public class ServicemanHistory
{
public int Id { get; set; }
public DateTime CreateDate { get; set; }
public string Title { get; set; }
public string categoryTitle { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
以下是我的请求方法:
public static async Task<List<ServicemanHistory>> getServiceManHistory()
{
string url = "https://myapi.net";
string token = Settings.token;
var client = new RestClient(url);
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer " + token);
var response = await client.ExecuteAsync<List<ServicemanHistory>>(request);
Console.WriteLine("**** response is:" + response.Content);
if(response.IsSuccessful)
{
Console.WriteLine("SUCCESS!!!");
return response.Data;
} else
{
return null;
}
}
公共静态异步任务getServiceManHistory()
{
字符串url=”https://myapi.net";
字符串标记=Settings.token;
var client=新的RestClient(url);
var请求=新的重新请求(Method.GET);
请求.AddHeader(“授权”、“承载人”+令牌);
var response=wait client.ExecuteAsync(请求);
Console.WriteLine(****响应为:“+response.Content”);
if(response.issucessful)
{
Console.WriteLine(“SUCCESS!!!”);
返回响应数据;
}否则
{
返回null;
}
}
我在控制台中打印成功,并从response.Content返回json,但response.Data始终为空。我使用NewtonSoft也做了同样的事情,但这并没有解决它。我尝试在反序列化器类中使用JSON数组的包装器,但也没有成功
我尝试使用NewtonSoft:
public static async Task<List<ServicemanHistory>> getServiceManHistory()
{
string url = "https://myapi.net";
string token = Settings.token;
var client = new RestClient(url);
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer " + token);
var response = await client.ExecuteAsync(request);
Console.WriteLine("**** response is:" + response.Content);
var result = JsonConvert.DeserializeObject<List<ServicemanHistory>>(response.Content);
if(response.IsSuccessful)
{
Console.WriteLine("SUCCESS!!!");
return result;
} else
{
return null;
}
}
公共静态异步任务getServiceManHistory()
{
字符串url=”https://myapi.net";
字符串标记=Settings.token;
var client=新的RestClient(url);
var请求=新的重新请求(Method.GET);
请求.AddHeader(“授权”、“承载人”+令牌);
var response=wait client.ExecuteAsync(请求);
Console.WriteLine(****响应为:“+response.Content”);
var result=JsonConvert.DeserializeObject(response.Content);
if(response.issucessful)
{
Console.WriteLine(“SUCCESS!!!”);
返回结果;
}否则
{
返回null;
}
}
尝试使用NewtonSoft反序列化时,出现以下错误:
public static async Task<List<ServicemanHistory>> getServiceManHistory()
{
string url = "https://myapi.net";
string token = Settings.token;
var client = new RestClient(url);
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer " + token);
var response = await client.ExecuteAsync(request);
Console.WriteLine("**** response is:" + response.Content);
var result = JsonConvert.DeserializeObject<List<ServicemanHistory>>(response.Content);
if(response.IsSuccessful)
{
Console.WriteLine("SUCCESS!!!");
return result;
} else
{
return null;
}
}
Newtonsoft.Json.JsonSerializationException
Message=无法将当前JSON对象(例如{“name”:“value”})反序列化为“System.Collections.Generic.List”类型
o修复此错误,或者将JSON更改为JSON数组(例如[1,2,3]),或者更改反序列化的类型,使其成为可以从JSON对象反序列化的正常.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化
你能告诉我们你用NewtonSoft做了什么吗?编辑了我的答案并添加了NewtonSoft位。错误清楚地说明了其他情况。如果它实际上是数组,你应该得到类似但不同的错误。端点是否可能基于某些条件同时返回单个元素和数组?如果响应是这样的,则Newtonsoft不会崩溃-demo:。关于您报告的内容有些不合理。您能告诉我们您使用NewtonSoft尝试了什么吗?编辑了我的答案并添加了NewtonSoft位。错误清楚地说明了其他情况。如果它实际上是数组,您应该得到类似但不同的错误。端点是否可能基于某些条件同时返回单个元素和数组?如果响应是这样的,则Newtonsoft不会崩溃-demo:。你所报道的有些东西没有意义。