2016-07-12 18 views
0

Entity Framework에서 WEB API 2 호출이 있습니다. DateTime.Now으로 데이터베이스에서 읽은 항목에서 DateTime 열을 업데이트하고이를 클라이언트에 serialize하면 데이터베이스에서받은 DateTime의 열에 밀리 초 동안 3 개의 숫자가 있지만 DateTime 인 열은 C# 코드에서 업데이트 된 6 자리가 있습니다. 다음은JSON에서 DateTime serialization의 밀리 초를 다듬는 방법

[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 자리 직렬화 된 것을 거기뿐만 아니라입니다 : 다음은 내 컨트롤러에서 C# 코드는?

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

소문자 fff이 부분은 밀리 초를 보장 :

답변

3

IsoDateTimeConverter를 사용하여 다음과 같이 그 위에 DateFormatString 속성을 설정

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

감사 : 나는 아래의 구성으로 포맷을 변경 항상 정확히 3 자리 길이. 반대로 default format은 밀리 초 동안 대문자 인 FFFFFFF을 사용합니다. 여기에는 최대 7 자리의 정밀도가 포함되지만 후행 0은 생략됩니다. 이 때문에 밀리 초 동안 다양한 길이가 표시됩니다.

사용자 지정 날짜 형식에 대한 자세한 내용은 .NET Framework 설명서의 Custom Date and Time Format Strings을 참조하십시오.

관련 문제