如何在 JSON 中修剪 DateTime 序列化中的毫秒数

Pas*_*cal 0 c# serialization datetime json asp.net-web-api2

我有一个带有实体框架的 WEB API 2 调用。如果我DateTime从我从数据库中读取的实体中更新一列DateTime.Now,并将其序列化到客户端,DateTime那么我从数据库收到的列有 3 个毫秒数,但是DateTime我在 C# 中更新的列代码有 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);
}
Run Code Online (Sandbox Code Playgroud)

下面是序列化回客户端的 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
}
Run Code Online (Sandbox Code Playgroud)

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

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Unspecified;
json.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat;
Run Code Online (Sandbox Code Playgroud)

谢谢

Bri*_*ers 5

使用 anIsoDateTimeConverterDateFormatString在其上设置属性,如下所示:

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

小写字母fff确保毫秒部分的长度始终为 3 位数字。相比之下,默认格式使用大写字母FFFFFFF表示毫秒,包括最多七位精度,但省略尾随零。这就是为什么您会看到毫秒的不同长度。

有关自定义日期格式的详细信息,请参阅.NET Framework 文档中的自定义日期和时间格式字符串