如何强制Netwtonsoft JSON序列化器将日期时间属性序列化为字符串?

7 浏览
0 Comments

如何强制Netwtonsoft JSON序列化器将日期时间属性序列化为字符串?

我正在使用Newtonsoft的Json库。\n当我序列化一个日期时间属性时,得到的JSON响应是:\n...\"CreatedOn\":\"\\/Date(1317303882420+0500)\\/\",...\n\n我希望它以简单的字符串形式表示,如:\n

..."createdOn": "2011-05-05 14:03:07", ...

\n虽然我的类属性是DateTime类型,但我想强制将其序列化为字符串,就像我们可以添加属性来更改属性名称一样:\n

  [JsonProperty("id")]
        public int ProductID { get; set; }

\n是否有类似的方法可以强制将DateTime属性序列化为字符串?

0
0 Comments

问题的出现的原因是需要将DateTime属性序列化为字符串,而默认情况下Newtonsoft Json Serializer会将DateTime属性序列化为ISO 8601格式的字符串。解决方法是使用IsoDateTimeConverter来自定义序列化的格式。

以下是解决方法的具体步骤:

1. 使用IsoDateTimeConverter类来进行序列化,代码如下:

string isoJson = JsonConvert.SerializeObject(this, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}

2. 根据需要自定义输出的格式,可以使用DateTimeFormat属性来设置输出的日期时间格式,代码如下:

return JsonConvert.SerializeObject(this, Formatting.None, new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });

3. 可以在WebApiConfig.Register方法中全局设置序列化的日期时间格式,代码如下:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateFormatString = "dd/MM/yyyy";

4. 如果需要处理ISO 8601格式的字符串,可以使用IsoDateTimeConverter的DateTimeFormat属性来设置格式,代码如下:

settings.Converters.Add(new Newtonsoft.Json.Converters.IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.FFFZ" });

通过上述方法,可以强制Newtonsoft Json Serializer将DateTime属性序列化为指定的字符串格式。

0