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

本文关键字:对象 DateTime 序列化 字符串 JSON net Server SQL 数据库 将从 | 更新日期: 2023-09-27 18:16:43

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

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

日期序列化一直是DataContractJsonSerializer的难点。请改用JSON.NET。

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

看起来它在DataContractJsonSerializer中真的是一个难题。你可以试着实现这个家伙在这里所做的。或者这是之前提出的类似问题的答案。