Serialize only Date part of DateTime in web api 2

asp.net, asp.net-web-api, c#, json

Solution

var json = JsonConvert.SerializeObject(
            new Person() { FirstName = "Joe", Birthday = DateTime.Now.AddDays(-2) },
            new ShortDateConverter()
            );

var p = JsonConvert.DeserializeObject<Person>(json,new ShortDateConverter());

or Decorate your field with `[JsonConverter(typeof(ShortDateConverter))]`

and use like

var json = JsonConvert.SerializeObject(new Person() 
                     { FirstName = "Joe", Birthday = DateTime.Now.AddDays(-2) } );

var p = JsonConvert.DeserializeObject<Person>(json);
public class ShortDateConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DateTime);
    }

    public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
    {
        return DateTime.ParseExact((string)reader.Value, "yyyy-MM-dd",CultureInfo.InvariantCulture);
    }

    public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
    {
        DateTime d = (DateTime)value;
        writer.WriteValue(d.ToString("yyyy-MM-dd"));
    }
}

Problem

Having this object : ``` public class Person { public string FirstName { get; set; } [DataType(DataType.Date)] public DateTime Birthday { get; set; } } ``` Returning this object as content in Web Api 2 generates this json for Birthday : `"2014-02-20T17:00:32.7114097+00:00"` How can I make it to be : `"2014-02-20"` without the time part?

Original source

Related problems