简体   繁体   English

WebAPI OData日期时间序列化

[英]WebAPI OData Datetime serialization

I need to change the way OData serializes DateTime and DateTimeOffset . 我需要更改OData序列化DateTimeDateTimeOffset

Currently we are using Microsoft.AspNet.OData 5.9.0 当前,我们正在使用Microsoft.AspNet.OData 5.9.0

By default the format is most likely yyyy-MM-dd'T'HH:mm:ss.FFFFFFzzz , but I need to have constant number of digits so something like yyyy-MM-dd'T'HH:mm:ss.fffzzz . 默认情况下,格式最有可能是yyyy-MM-dd'T'HH:mm:ss.FFFFFFzzz ,但是我需要使用固定位数,所以像yyyy-MM-dd'T'HH:mm:ss.fffzzz

So far I've learned that WebApi OData does not use Newtonsoft.Json for Json serialization as WebApi does and that it's pretty hard to find some examples of how to change serializer behavior. 到目前为止,我了解到WebApi OData不像WebApi那样使用Newtonsoft.Json进行Json序列化,并且很难找到一些如何更改序列化器行为的示例。

Thanks for help! 感谢帮助!

You can achieve this via creating a customized payload coverter, 您可以通过创建自定义的有效载荷掩体来实现此目的,

  1. Implement a class extends class ODataPayloadValueConverter 实现一个类扩展类ODataPayloadValueConverter

  2. Override method public override object ConvertToPayloadValue(object value, IEdmTypeReference edmTypeReference) 重写方法公共重写对象ConvertToPayloadValue(对象值,IEdmTypeReference edmTypeReference)

  3. Have a check like this in the method if (value is DateTimeOffSet) { return "CustomziedString"; 在方法中进行如下检查,如果(值是DateTimeOffSet){return“ CustomziedString”; } }

  4. Register into your model via setting like model.SetPayloadValueConverter(converter); 通过诸如model.SetPayloadValueConverter(converter)之类的设置注册到模型中;

Then the payload in response will be shown the DateTimeOffset in your customized way. 然后,响应中的有效负载将以您自定义的方式显示DateTimeOffset。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM