2017-05-06 1 views
0

NewtonSoft.JSON을 사용하여 JSON으로 객체를 직렬화합니다. 날짜/시간 형식이 2017-05-06T11 : 59 : 37 : 012-0500이어야한다는 요구 사항이 있습니다. 나는 내 자신의 날짜/시간 형식을 전달하여 2017-05-06T11 : 59 : 37 : 012-05 : 00처럼 전달합니다. 그러나 시간대에서 콜론을 제거하는 방법을 잘 모릅니다.JSON 날짜를 yyyy-MM-ddTHH로 serialize하십시오. mm : ss : 시간대에 콜론이없는 fffzzzz

변환 방법은 다음과 같습니다. 그러나 문자열을 직접 실제로 사용할 수있는 곳이 필요합니다.

var postDataSerialized = JsonConvert.SerializeObject(postData, new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-ddTHH:mm:ss:fffzzzz" }); 
+0

http://www.newtonsoft.com/json/help/html/CustomJsonConverter .htm) ['IsoDateTimeConverter'] (https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs)와 비슷한 서식을 사용하십시오. – dbc

답변

2

불행히도 일부 매개 변수 값을 조정하면이 콜론을 피할 방법이 없습니다. IsoDateTimeConverteruses .Net DateTime 사용자 지정 형식 기능 및 zzz 사용자 지정 형식의 경우 colon is hardcoded

따라서 사용자는 JsonConverter 사용자 정의를 제공하여 원하는 형식을 직접 구현해야합니다. 사용자 지정 변환은 다음과 같이 보일 수 있습니다 :

public class NoColonIsoDateTimeConverter : IsoDateTimeConverter 
{ 
    public NoColonIsoDateTimeConverter() 
    { 
     DateTimeFormat = "yyyy'-'MM'-'ddTHH':'mm':'ss':'fffzzz"; 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     if (value is DateTime) 
     { 
      var dateTime = (DateTime)value; 
      var text = dateTime.ToString(DateTimeFormat); 
      text = text.Remove(text.Length - 3, 1); 
      writer.WriteValue(text); 
     } 
     else 
     { 
      throw new JsonSerializationException("Unexpected value when converting date. Expected DateTime"); 
     } 
    } 
} 

데모 : https://dotnetfiddle.net/79AuZs

당신은 당신의 자신의 [사용자 정의`JsonConverter` (만들 수