2016-07-12 26 views
0

我有一個帶有實體框架的WEB API 2調用。如果我從我的實體更新DateTime列,我使用DateTime.Now從數據庫中讀取,並將其序列化到客戶端,那麼從數據庫收到的DateTime的列在毫秒中有3個數字,但列的DateTime表示I更新的C#代碼有6位數字。下面是我的控制器C#代碼:如何在JSON中修剪DateTime序列化中的毫秒

[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); 
} 

下面是序列化回客戶端

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

的JSON有沒有一種方法,使DtUpdate序列化與3位呢? 我改變格式化與下面的結構:

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

由於

回答

3

使用一個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以獲取有關自定義日期格式的更多信息。

相關問題