2016-07-12 19 views
0

Ich habe einen Web API 2 Aufruf mit Entity Framework. Wenn ich eine DateTime Spalte von meiner Entität, die ich aus der Datenbank mit DateTime.Now gelesen habe, und ich es auf dem Client serialisieren, die Spalte mit DateTime, die ich von der Datenbank erhalten hat 3 Nummern für die Millisekunden, aber die Spalte mit DateTime, die ich im C# -Code aktualisiert hat 6 Ziffern. Unten ist der C# -Code in meinem Controller:Wie in JSON die Millisekunden in DateTime Serialisierung trimmen

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

Im Folgenden wird die JSON, die

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

Gibt es einen Weg zurück an den Client serialisiert wird, so dass die DtUpdate als auch mit 3 Ziffern serialisiert? änderte ich den Formatierer mit der Konfiguration unter:

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

Dank

Antwort

3

ein IsoDateTimeConverter verwenden und die DateFormatString Eigenschaft auf es wie folgt festgelegt:

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

Die Klein fff sorgt für die Millisekunden Abschnitt immer genau 3 Ziffern lang. Im Gegensatz dazu verwendet die default format Großbuchstaben FFFFFFF für die Millisekunden, die bis zu sieben Ziffern der Genauigkeit enthält, aber keine abschließenden Nullen. Aus diesem Grund sehen Sie für die Millisekunden unterschiedliche Längen. Weitere Informationen zu benutzerdefinierten Datumsformaten finden Sie in der .NET Framework-Dokumentation unter Custom Date and Time Format Strings.