0

我有一堆实体类(由 Linq to SQL 生成),其中包含一些 DateTimeOffset 属性。

当我从 .asmx Web 服务通过网络将其作为 JSON 发送时,JSON 序列化程序会生成以下 JSON:

{"DateTime":"\/Date(1252142834307)\/",
 "UtcDateTime":"\/Date(1252142834307)\/",
 "LocalDateTime":"\/Date(1252142834307)\/",
 "Date":"\/Date(1252101600000)\/",
 "Day":5,
 "DayOfWeek":6,
 "DayOfYear":248,
 "Hour":11,
 "Millisecond":307,
 "Minute":27,
 "Month":9,
 "Offset":{"Ticks":72000000000,
           "Days":0,
           "Hours":2,
           "Milliseconds":0,
           "Minutes":0,
           "Seconds":0,
           "TotalDays":0.083333333333333329,
           "TotalHours":2,
           "TotalMilliseconds":7200000,
           "TotalMinutes":120,
           "TotalSeconds":7200},
 "Second":14,
 "Ticks":633877468343070254,
 "UtcTicks":633877396343070254,
 "TimeOfDay":{"Ticks":412343070254,
              "Days":0,
              "Hours":11,
              "Milliseconds":307,
              "Minutes":27,
              "Seconds":14,
              "TotalDays":0.47724892390509255,
              "TotalHours":11.453974173722221,
              "TotalMilliseconds":41234307.025400005,
              "TotalMinutes":687.23845042333335,
              "TotalSeconds":41234.3070254},
 "Year":2009}
}

我非常想节省客户端的带宽和 JSON 解析时间。我还真的很想避免在将每个 DateTimeOffset 发送到 Web 服务之前手动投影它。

我意识到 JSON 序列化程序按预期执行,所以我的问题是:有没有办法配置 JSON 序列化程序,以便它只发送 DateTimeOffset 对象的 LocalDateTime 属性?

谢谢,埃吉尔。

4

1 回答 1

2

修改对象序列化输出需要您覆盖DateTimeOffset 对象的序列化方法。由于 DateTimeOffset 是 BCL 的一部分,因此您不能自己覆盖它。

最简单的解决方案是创建一个实现 DateTimeOffset 的自定义对象,允许您从 ISerializable 接口覆盖 GetObjectData。您的 Web 方法将需要返回您的自定义对象而不是 DateTimeOffset 对象,但如果此 Web 服务的使用是 JSON 格式,这对您的客户端群应该没有影响。

系统生成的类有点痛苦,但您需要替换自己的类来控制序列化输出。

于 2009-09-08T02:38:12.233 回答