У меня есть проект ASP.NET WebApi, который использует Entity Framework 4.1. Я пытаюсь вернуть сущность и использовать JSON.net для десериализации. Тем не менее, все работает хорошо, пытаясь десериализовать объекты с свойствами TimeSpan, которые я запускаю, за исключением следующего:Deserializing TimeSpan с использованием JSON.net и .net WebApi
Невозможно выполнить преобразование или преобразование из System.String в System.TimeSpan.
Глядя на трассировки стека показывает:
JsonSerializationException: Ошибка преобразования значения "PT17H9M43.1671969S" к типу 'System.TimeSpan'. Путь 'TimeIn', строка 1, позиция 890.
Выход из response.Content.ReadAsStringAsync().Result
является:
{ "CreatedDate": "/ Дата (1329851383157-0500) /", "ServicerUserId": 6, "TimeIn": "PT17H9M43.1671969S", "TimeOut": "PT17H28M43.1671969S"}
Перед использованием Json.NET я успешно десериализации с использованием System.Runtime.Serialization.JsonDataContractJsonSerializer
однако предпочел бы не использовать этот подход.
Код, используемый для получения от лица WebAPI
public T Get<T>(object id)
{
using (var httpClient = NewHttpClient())
{
var response = httpClient.GetAsync(_endpoint + id.ToString()).Result;
return JsonConvert.DeserializeObject<T>(response.Content.ReadAsStringAsync().Result);
}
}
код, используемый в контроллере WebAPI вернуть объект:
// GET /api/services/5
public Service Get(Guid id)
{
var entry = db.Services.Find(id);
if (entry == null)
throw new HttpResponseException(HttpStatusCode.NotFound);
return entry;
}
Любые идеи о том, как десериализации TimeSpan был бы весьма признателен.
Вы можете обновить свой вопрос со значением response.Content .ReadAsStringAsync(). Результат? –
Кроме того, поскольку вы явно не показываете свой сервер HttpConfiguration, я собираюсь предположить, что вы используете форматирование по умолчанию. Однако вы хотите десериализовать ответ, используя Json.NET. В идеале у вас должен быть форматер медиа-типа Json.NET, и он будет настраивать сервер для его использования и гарантировать, что ваш клиент использует его при чтении содержимого, например: response.Content.ReadAsAsync (новый [] {новый JsonNetFormatter()}) , –
Добавлен пример содержимого из ответа.Content.ReadAsStringAsync(). Результат – Jakkwylde