gpt4 book ai didi

.net - HttpClient.ReadAsAsync 在使用 [Serializable] 时返回空对象

转载 作者:行者123 更新时间:2023-12-04 04:42:27 24 4
gpt4 key购买 nike

我正在使用 Microsoft ASP.NET Web API 客户端库(版本 4.0.30506,因为我必须在 .NET Framework 4.0 上运行)以与 .NET Web API 交互。我已经确认数据接收正常。但是,从 ReadAsAsync 调用返回的对象未填充(非空)。在网上挖掘之后,我发现了这个 SO 帖子(也请参阅答案):

HttpClient response ReadAsAsync() doesn't fully deserialize object

事实证明,我通过 JSON 发送给客户端的对象被标记为 [Serializable] 并且删除此属性会使一切正常(我已经通过测试确认了这一点)。但是,这些对象在其他应用程序中使用的其他场景需要 [Serializable] 属性,因此简单地删除该属性并不是一个真正的选择。

我的代码如下所示。当 [Serializable] 属性应用于 Customer 对象(如图所示)时,对 Get 方法的调用(未显示)将返回一个未填充的 Customer 对象。删除该属性后,返回的 Customer 对象将填充属性。

    [Serializable]
public class Customer
{
public string Name { get; set; }
}

public class WebAPIClient
{
private readonly HttpClient _httpClient;

public WebAPIClient(Uri baseAddress)
{
_httpClient = new HttpClient();
_httpClient.BaseAddress = baseAddress:
_httpClient.DefaultRequestHeaders.Accept.Clear();
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}

public Customer Get(int id)
{
string url = [code that builds url] + id.ToString();
HttpResponseMessage response = _httpClient.GetAsync(url).Result;
response.EnsureSuccessStatusCode();
return response.Content.ReadAsAsync<Customer>().Result;
}
}

谁能解释为什么我会看到这种行为,以及如何在不从我的数据类中删除 [Serializable] 属性的情况下绕过它?

最佳答案

尝试这样的事情......

public static class ApiUtil
{
static HttpClient GetApiClient()
{
var client = new HttpClient();
client.BaseAddress = new Uri(ConfigurationManager.AppSettings["apiUrl"]);
return client;
}

public static async Task<Customer> GetCustomer(int id)
{
var client = GetApiClient();
string query = "Customers(" + id + ")";
var response = await client.GetAsync(query);
return await response.Content.ReadAsAsync<Customer>();
}
}

然后要使用它,您可以在异步方法中执行类似的操作...
var customer = await ApiUtil.GetCustomer(1);

如果在调用此方法时不能使用 async 和 await ,请尝试类似...
var customerTask = ApiUtil.GetCustomer(1);
customerTask.Wait();
var customer = customerTask.Result;

关于.net - HttpClient.ReadAsAsync<T> 在使用 [Serializable] 时返回空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com