接收基于SQL脚本的http响应(ASP.NET)

vmdwslir  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(147)

我有一个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调用方法,而想坚持使用一个方法,在那里我可以接收来自它的响应,将其反序列化为对象列表,然后我可以将这些对象转换为我想使用的模型的任何数据类型。

gijlo24d

gijlo24d1#

我使用JsonConvert.DeserializeAnonymousType设法解决了这个问题

foreach (var item in data.result)
            {
                Name name= new Name();
                name= JsonConvert.DeserializeAnonymousType(item.ToString(), name);
                NamesCollection.Add(name);
            }

相关问题