私は、Entity Framework 4.1を使用するASP.NET WebApiプロジェクトを持っています。エンティティを返し、JSON.netをデシリアライズに利用しようとしています。すべてがうまくいきますTimeSpanプロパティを持つエンティティを逆シリアル化しようとすると、次の例外が発生します。JSON.netと.net WebApiを使用したTimeSpanの逆シリアル化
が明らかになった:System.StringからSystem.TimeSpanにキャストまたは変換できませんでした。スタックトレースを見ると
JsonSerializationException:エラー値 "PT17H9M43.1671969Sを" 変換は 'のSystem.TimeSpan' を入力します。パス 'TimeIn'、行1、 位置890
response.Content.ReadAsStringAsync().Result
から出力される。
{ "CreatedDateに": "/日(1329851383157から0500)/"、 "ServicerUserId": 6、 "TimeIn": "PT17H9M43.1671969S"、 "タイムアウト": "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のをデシリアライズする方法上の任意のアイデアをいただければ幸いです。
で参照されるようにGlobal.asaxののApplication_Startイベントでは、デフォルトで直列化のためのJSON.netを活用するWEBAPIプロジェクトを設定するには、あなたの質問がresponse.Contentの値で更新することができました.ReadAsStringAsync()。結果? –
また、サーバーのHttpConfigurationを明示的に表示しないため、既定のフォーマッターを使用していると仮定します。それでも、Json.NETを使用してレスポンスを逆シリアル化する必要があります。理想的には、Json.NETのメディアタイプのフォーマッタを使用し、それを使用するようにサーバを設定し、クライアントが次のようなコンテンツを読むときにそれを使用することを確認します:response.Content.ReadAsAsync(new [] {new JsonNetFormatter()}) 。 –
response.Content.ReadAsStringAsync()のサンプルコンテンツが追加されました。結果 – Jakkwylde