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?