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 :)

1
  • 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. Commented Mar 9, 2020 at 19:03

2 Answers 2

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.

Sign up to request clarification or add additional context in comments.

1 Comment

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 :)
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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.