J'ai un projet ASP.NET WebApi qui utilise Entity Framework 4.1. Je tente de retourner une entité et de tirer parti de JSON.net pour la désérialisation. Tout fonctionne bien mais lorsque vous tentez de désérialiser des entités avec des propriétés TimeSpan, je cours l'exception suivante:Désérialisation de TimeSpan à l'aide de JSON.net et .net WebApi
Impossible de convertir ou de convertir System.String en System.TimeSpan.
Au vu de la trace de pile révèle:
JsonSerializationException: Erreur de conversion de valeur "PT17H9M43.1671969S" de type 'System.TimeSpan. Chemin 'TimeIn', ligne 1, la position 890.
La sortie de response.Content.ReadAsStringAsync().Result
est:
{ "CreatedDate": "/ Date (1329851383157-0500) /", "ServicerUserId": 6, "TimeIn": "PT17H9M43.1671969S", "TimeOut": "PT17H28M43.1671969S"}
Avant d'utiliser JSON.net j'ai réussi à désérialisée en utilisant System.Runtime.Serialization.JsonDataContractJsonSerializer
mais préféreraient ne pas utiliser cette approche.
code utilisé pour obtenir de l'entité 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);
}
}
Code utilisé dans le contrôleur de WebAPI retourner entité:
// 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;
}
Toutes les idées sur la façon de désérialiser TimeSpan de serait grandement apprécié.
Pouvez-vous mettre à jour votre question avec la valeur de response.Content .ReadAsStringAsync(). Résultat? –
En outre, puisque vous ne montrez pas explicitement votre HttpConfiguration du serveur, je vais supposer que vous utilisez les formateurs par défaut. Pourtant, vous voulez désérialiser la réponse en utilisant Json.NET. Idéalement, vous auriez un formateur de type de support Json.NET et configureriez le serveur pour l'utiliser et vous assurer que votre client l'utilise lors de la lecture de contenu comme: response.Content.ReadAsAsync (new [] {new JsonNetFormatter()}) . –
Ajout d'un exemple de contenu provenant de response.Content.ReadAsStringAsync(). Résultat – Jakkwylde