将从SQL Server数据库解析为.net DateTime对象的序列化为JSON String

时间:2013-06-04 00:15:30

标签: c# sql-server json api datetime

我认为我的.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

2 个答案:

答案 0 :(得分:7)

日期序列化一直是DataContractJsonSerializer的粗略点。请改为JSON.NET

This is one of the reasons WebAPI默认决定使用JSON.NET,而不是旧的DataContractJsonSerializer

答案 1 :(得分:0)

看起来它真的是DataContractJsonSerializer中的陷阱。你可以尝试实现这个人做的here。或this answer或之前提出的类似问题。