WebApi Json.NET 自定义日期处理

13

我已经全局显式地配置了我的MVC4应用程序,使用JSON.NET序列化器。我知道在序列化日期时可以选择使用ISO标准日期或旧的Microsoft日期格式。

但是如何输出自己的自定义dateTime格式字符串,例如:"dd/MM/yyyy hh:mm"?

当将Json.NET作为默认序列化器插入MVC3时,我可以这样做,但似乎无法在MVC4中实现。

到目前为止,在application_start中我已经做了以下操作:

  var settings =     GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;            
        JsonSerializerSettings jSettings = new Newtonsoft.Json.JsonSerializerSettings()
        {
            Formatting = Formatting.Indented,
            DateTimeZoneHandling = DateTimeZoneHandling.Utc,


        };
        jSettings.Converters.Add(new MyDateTimeConvertor() );
        settings = jSettings;

我尝试实现的自定义转换器如下:

 public class MyDateTimeConvertor : DateTimeConverterBase
    {
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            return DateTime.Parse(reader.Value.ToString());
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            writer.WriteValue(((DateTime)value).ToString("dd/MM/yyyy hh:mm"));
        }
    }
任何帮助都将不胜感激 :)

请记住,您在这里遇到的问题的根源是您没有将jSettings分配给GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings。相反,您将其分配给了一个局部变量“settings”。 - Brain2000
2个回答

22

请将设置设置代码更改为以下内容:

JsonMediaTypeFormatter jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
JsonSerializerSettings jSettings = new Newtonsoft.Json.JsonSerializerSettings()         
{
    Formatting = Formatting.Indented,
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
jSettings.Converters.Add(new MyDateTimeConvertor());
jsonFormatter.SerializerSettings = jSettings;

在你的代码中,你只是改变了局部变量的值。


所以我将新配置的JsonSerializerSettings分配给了serializer settings而不是它的父级jsonFormatter??...嗯,实际上有很多猜测,但还是谢谢你的帮助 :) - P0DD3R5

0

谢谢,我都快疯了,这个对我非常有效,在Global.asax.cs中粘贴即可。

JsonMediaTypeFormatter jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
JsonSerializerSettings jSettings =...

创建一个名为MyDateTimeConvertor的类,将以下代码粘贴到类中。
public class MyDateTimeConvertor : DateTimeConverterBase
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return DateTime...

web api mvc4,Web服务,自定义日期格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接