2017-05-06 95 views
0

我正在使用NewtonSoft.JSON将我的对象序列化为JSON。我有一个要求,日期时间格式必须是2017-05-06T11:59:37:012-0500。我已经以我自己的日期时间格式传递,以便通过此2017-05-06T11:59:37:012-05:00。不过,我不确定如何在时区中删除冒号。在时区中序列化JSON日期为yyyy-MM-ddTHH:mm:ss:fffzzzz不带冒号

下面是如何转换它,但我需要一些东西,我可以直接使用字符串。

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

你可以创建自己的[自定义'JsonConverter'(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自定义格式功能,而colon is hardcoded自定义格式为zzz

因此,您必须自己实现所需的格式,这可以通过提供自定义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

相关问题