【问题标题】:How to trim in JSON the miliseconds in DateTime serialization如何在 JSON 中修剪 DateTime 序列化中的毫秒数
【发布时间】:2016-07-12 16:38:05
【问题描述】:

我有一个带有实体框架的 WEB API 2 调用。如果我从使用DateTime.Now 从数据库中读取的实体更新DateTime 列,并将其序列化到客户端,则我从数据库收到的带有DateTime 的列在毫秒内有3 个数字,但是我在 C# 代码中更新的带有 DateTime 的列有 6 位数字。以下是我的控制器中的 C# 代码:

[Route("{id:long}/updatedatetime", Name = "UpdateDateTimeByID")]
[HttpPost]
[ResponseType(typeof(ClGroup))]
public async Task<IHttpActionResult> UpdateDateTimeByID(int id)
{
        ClGroup clGroup = await db.ClGroups.FindAsync(id);
        if (clGroup == null)
        {
        return NotFound();
        }
        clGroup.DtUpdate = DateTime.Now;

        await db.SaveChangesAsync();
        var groupReturn = mapper.Map<ClGroupModel>(clGroup);
        return Ok(groupReturn);
}

下面是序列化回客户端的 JSON

{
  "CdGroup": 1,
  "NmGroup": "Grupo 1",
  "DcGroup": "Primeiro Grupo",
  "DtInsert": "2016-07-03T22:18:52.257",
  "DtUpdate": "2016-07-12T13:31:08.2882558",
  "IdStatus": true
}

有没有办法让DtUpdate 也被序列化为 3 位数字? 我使用以下配置更改了格式化程序:

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Unspecified;
json.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat;

谢谢

【问题讨论】:

    标签: c# json datetime serialization asp.net-web-api2


    【解决方案1】:

    使用IsoDateTimeConverter 并在其上设置DateFormatString 属性,如下所示:

    var dateConverter = new Newtonsoft.Json.Converters.IsoDateTimeConverter 
    { 
        DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'" 
    };
    json.SerializerSettings.Converters.Add(dateConverter);
    

    小写的fff 确保毫秒部分总是恰好是3 位数字。相比之下,default format 使用大写的FFFFFFF 表示毫秒,其中包括最多七位精度,但省略尾随零。这就是为什么您会看到毫秒长度不同的原因。

    有关自定义日期格式的详细信息,请参阅 .NET Framework 文档中的 Custom Date and Time Format Strings

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-26
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2010-11-03
      相关资源
      最近更新 更多