我有一个API端点,它在其正文内容中包含一个SQL脚本,以便从服务器获取所需的数据。
{
"result": "the data resulted from the SQL execution",
"totalrows: "the total number of data rows"
}
因为数据模式会根据发送的SQL而有所不同,所以我为JSON数据反序列化创建了数据模型,如下所示:
public class QueryResult
{
public List<object> result { get; set; }
public int totalRows { get; set; }
}
我发送请求并成功地从服务器接收到数据:
public static async Task<QueryResult> ExecuteQuery(Query query)
{
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
var json = JsonConvert.SerializeObject(query);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync(AppSetting.url, content);
var jsonResult = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<QueryResult>(jsonResult);
}
返回的JSON示例(反序列化之前):
{"totalrow":1,"result":[{"Name":"Ali","Age":35}]}
我尝试根据我将用于应用程序的所需数据模型来转换对象,但收到以下错误消息:
NamesCollection= new List<Name>();
var data = await ApiServices.ExecuteQuery(sampleQuery);
foreach (var item in data.result)
{
NamesCollection.Add((Name)item);
}
System.InvalidCastException:无法将类型为“Newtonsoft.Json.Linq.JObject”得对象强制转换为类型
我如何解决这个问题?我不想为每个数据模型创建一个API调用方法,而想坚持使用一个方法,在那里我可以接收来自它的响应,将其反序列化为对象列表,然后我可以将这些对象转换为我想使用的模型的任何数据类型。
1条答案
按热度按时间gijlo24d1#
我使用
JsonConvert.DeserializeAnonymousType
设法解决了这个问题