在WCF中更改默认日期序列化

无论如何,是否可以在WCF中更改DateTime的默认JSON序列化/反序列化

目前,DateTime已序列化为该/Date(1372252162657+0200)/格式,应该没问题,但是当我的服务器不在UTC中时(我无法更改),我遇到了问题。

此服务正在处理的所有日期/时间数据均为UTC格式。服务器处于UTC时一切正常。但是,暂存/生产环境设置为GMT +

1(Paris),并且序列化程序假定日期/时间在GMT +

1中,而完全忽略了该属性Kind。因此,正如您期望的那样DateTime.SetKind(),将其设置为UTC不会起作用。实际上,序列化的时间延迟了一个小时。

我既可以进行双向日期对话(在反序列化时也进行相同的假设,因此始终为GMT +

1):日期对话:UTC往返服务器时间,但这非常乏味。所以我想也许我可以覆盖默认的序列化行为。

回答:

是的,可以使用称为“ ” 的概念来完成此操作

但是Message

Formatter会很困难并且超出范围,无法在此处解释堆栈溢出。您可以参考WCF可扩展性:消息格式化程序

如果您不希望将其弄乱,那么可以使用hack。

将每个方法的返回类型设置为Stream。

例如

        public Stream GetStaticData()

{

var objTobeReturned = something;

WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";

return new MemoryStream(Encoding.UTF8.GetBytes(objTobeReturned.ToJson()));

}

这里ToJson()是我自己的扩展方法,该方法使用NewtonSoft库将对象转换为json字符串。

WCF将跳过流输出以进行序列化,并将其原样传递给您的客户端。

我希望你能得到答案。

以上是 在WCF中更改默认日期序列化 的全部内容, 来源链接: utcz.com/qa/399120.html

回到顶部