13

I have globally explicitly configured my MVC4 app to use the JSON.NET serializer . I know i have the choice of using the ISO standard dates or the old Microsoft date format when serializing dates.

But how can i output my own custom dateTime format string ,like :"dd/MM/yyyy hh:mm".

I could do this in MVC3 when plugging in Json.NET as the default serializer but cant seem to do it in MVC4 .

So far in the application_start i have done :

  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;

and the custom converter i tried to impliment is like so :

 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"));
        }
    }

Anyhelp would be appreciated :)

j0k
  • 22,600
  • 28
  • 79
  • 90
P0DD3R5
  • 236
  • 1
  • 3
  • 11
  • Keep in mind the root of your issue here is you did not assign jSettings to GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings. Instead you assigned it to "settings", which is a local variable. – Brain2000 Mar 09 '20 at 19:03

2 Answers2

22

Change your setting set up code like this:

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;

In your code you are just changing local variable value.

tpeczek
  • 23,867
  • 3
  • 74
  • 77
  • so i was assigning the the newly configured Jsonserializersettings to serializer settings instead of its parent jsonFormatter??....hmmm quite a lot of it was guess work tbh, but thankyou for your help :) – P0DD3R5 Oct 12 '12 at 12:07
0

Thanks, I was going crazy, this worked very well for me,paste this in the Global.asax.cs

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

create a class MyDateTimeConvertor, paste this in the class

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

wep api mvc4, web services, custom date format.

roberto
  • 31
  • 3