Entity Framework 4.1 を利用する ASP.NET WebApi プロジェクトがあります。エンティティを返そうとしていますが、JSON.net を逆シリアル化に利用しています。すべてがうまく機能していますが、TimeSpan プロパティを使用してエンティティを逆シリアル化しようとすると、次の例外が発生します。
System.String から System.TimeSpan にキャストまたは変換できませんでした。
スタック トレースを見ると、次のことがわかります。
JsonSerializationException: 値「PT17H9M43.1671969S」を「System.TimeSpan」型に変換中にエラーが発生しました。パス「TimeIn」、1 行目、位置 890。
からの出力response.Content.ReadAsStringAsync().Result
は次のとおりです。
{"CreatedDate":"/Date(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 を逆シリアル化する方法についてのアイデアは大歓迎です。