在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