我有一个使用 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 的想法将不胜感激。