2

我相信我的 .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 控制器或相反生成的格式?我应该使用不同的解析器吗?

感谢您的时间,

-- 技术火箭9

4

2 回答 2

7

日期序列化一直是DataContractJsonSerializer. 请改用JSON.NET

这是WebAPI 决定默认使用 JSON.NET 而不是旧的DataContractJsonSerializer.

于 2013-06-04T02:31:01.340 回答
0

看起来这真的是一个陷阱DataContractJsonSerializer。您可以尝试执行此人在这里所做的事情。或者这个回答之前提出的类似问题。

于 2013-06-04T01:32:06.173 回答