Я работаю с клиентскими библиотеками веб-API Microsoft ASP.NET (версия 4.0.30506, так как я должен работать на .NET Framework 4.0) для взаимодействия с. NET веб-API. Я подтвердил, что данные получены штрафом. Однако объект, возвращенный из вызова ReadAsAsync, остается незаселенным (не нулевым). После того, как копаться в Интернете, я нашел, что это ТАК опубликовать (см ответ, а):HttpClient.ReadAsAsync <T> Возвращает пустой объект при использовании [Serializable]
HttpClient response ReadAsAsync() doesn't fully deserialize object
Оказывается, объекты, которые я посылаю к клиенту через JSON помечены [Serializable] и удаление этот атрибут заставляет все работать нормально (что я подтвердил с помощью тестирования). Однако для этих объектов необходим атрибут [Serializable] для других сценариев, где они используются в других приложениях, поэтому просто удаление атрибута на самом деле не является вариантом.
Мой код показан ниже. Вызовы (не показаны) методу Get возвращают непопущенный объект Customer, когда атрибут [Serializable] применяется к объекту 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] (http://www.sscce.org/) –
Дополнительная кодировка добавлена для контекста и ясности. – goombaloon
Я нашел решение [здесь] [1] и подтвердил, что он работает. [1]: http://stackoverflow.com/questions/20914080/make-json-net-and-serializable-attribute-work-together – goombaloon