我有一个使用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": "/日期(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);
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
任何关于如何反序列化TimeSpan的想法都将不胜感激.