我认为我的.NET 4.5 DateTime对象被我的ASP.NET MCV 4 Web应用程序中的ApiController错误地序列化了。从SQL Server数据库中检索DataRow对象后,我将其分配给CarrierObject中的DateTime成员对象。
StartTime = (DateTime)row["start_time"]
在此之后,我将CarrierObject添加到列表中,并在处理完所有相关条目后返回列表。 ApiController将列表转换为JSON字符串以进行传输。
当我在客户端上执行API调用并读取JSON输出时,我得到的形式是2013-06-03T22:49:21.66 虽然这看起来很乍一看,尝试使用
在客户端解析它var client = new HttpClient();
var uri = new Uri("http://555.55.55.55/test4/api/values");
Stream respStream = await client.GetStreamAsync(uri);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<CarrierObject>));
List<CarrierObject> feeds = (List<CarrierObject>)ser.ReadObject(respStream);
它以异常
失败System.Runtime.Serialization.SerializationException was unhandled by user code
HResult=-2146233076
Message=There was an error deserializing the object of type System.Collections.Generic.List ... PublicKeyToken=null]]. DateTime content '2013-06-03T22:49:21' does not start with '\/Date(' and end with ')\/' as required for JSON.
似乎想要格式为/ Date(1224043200000)/的东西。虽然我可以手动编写一个转换器来生成正确的JSON格式,这似乎违背了API控制器执行的自动序列化和DataContractJsonSerializer执行的自动反序列化的目的。有没有办法让DataContractJsonSerializer接受API控制器生成的格式或相反的格式?我应该使用不同的解析器吗?
感谢您的时间,
- Techrocket9
答案 0 :(得分:7)
日期序列化一直是DataContractJsonSerializer
的粗略点。请改为JSON.NET。
This is one of the reasons WebAPI默认决定使用JSON.NET,而不是旧的DataContractJsonSerializer
。
答案 1 :(得分:0)
看起来它真的是DataContractJsonSerializer
中的陷阱。你可以尝试实现这个人做的here。或this answer或之前提出的类似问题。