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

Tec*_*et9 2 c# sql-server api datetime json

我相信我的.NET 4.5 DateTime对象被我的ASP.NET MCV 4 Web应用程序中的ApiController错误地序列化了.从SQL Server数据库中检索DataRow对象后,我将其分配给CarrierObject中的DateTime成员对象.

StartTime = (DateTime)row["start_time"]
Run Code Online (Sandbox Code Playgroud)

在此之后,我将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);
Run Code Online (Sandbox Code Playgroud)

它失败了,例外

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.
Run Code Online (Sandbox Code Playgroud)

它似乎想要格式/日期(1224043200000)/的东西.虽然我可以手动编写一个转换器来生成正确的JSON格式,这似乎违背了API控制器执行的自动序列化和DataContractJsonSerializer执行的自动反序列化的目的.有没有办法让DataContractJsonSerializer接受API控制器生成的格式或相反的格式?我应该使用不同的解析器吗?

感谢您的时间,

- Techrocket9

Ste*_*ary 7

日期序列化一直是一个粗略的观点DataContractJsonSerializer.请尝试使用JSON.NET.

这是 WebAPI默认决定使用JSON.NET而不是旧版本的原因之一DataContractJsonSerializer.