【发布时间】:2014-06-10 10:16:36
【问题描述】:
我正在使用 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] 属性的情况下解决它?
【问题讨论】:
-
你的json在哪里?
TEntity是什么?发个SSCCE怎么样 -
为上下文和清晰度添加了额外的编码。
-
我在 [这里][1] 找到了解决方案,并确认它有效。 [1]:stackoverflow.com/questions/20914080/…
-
感谢它现在可以工作了...一个简单的属性可以破坏很多东西哈哈...
标签: .net json serialization dotnet-httpclient asp.net-web-api2