反序列化网页API 2日期时间只有部分日期 [英] Deserialize only Date part of DateTime in web api 2
本文介绍了反序列化网页API 2日期时间只有部分日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有了这个对象:
公共类Person {
公共字符串名字{获得;组; }
[数据类型(DataType.Date)
公众的DateTime生日{搞定;组; }
}
Returnin在网页API 2内容生成此JSON生日这个对象:
2014-02-20T17:00:32.7114097 + 00:00
我怎样才能使之成为:<?code>2014年2月20日没有时间部分
解决方案
VAR JSON = JsonConvert.SerializeObject(
新的Person(){名字=乔,生日= DateTime.Now.AddDays(-2)},
新ShortDateConverter()
);变种p值= JsonConvert.DeserializeObject&所述;人&GT;(JSON,新ShortDateConverter());
或装饰你的领域[JsonConverter(typeof运算(ShortDateConverter))]
和使用像
VAR JSON = JsonConvert.SerializeObject(新的Person()
{名字=乔,生日= DateTime.Now.AddDays(-2)});VAR P = JsonConvert.DeserializeObject&LT;&人GT;(JSON);
公共类ShortDateConverter:JsonConverter
{
公众覆盖布尔CanConvert(类型的objectType)
{
返回的objectType == typeof运算(日期时间);
} 公众覆盖对象ReadJson(Newtonsoft.Json.JsonReader读者,类型的objectType,对象existingValue,Newtonsoft.Json.JsonSerializer串行)
{
返回DateTime.ParseExact((串)reader.Value,YYYY-MM-DD,CultureInfo.InvariantCulture);
} 公共覆盖无效WriteJson(Newtonsoft.Json.JsonWriter作家,对象的值,Newtonsoft.Json.JsonSerializer串行)
{
日期时间D =(DateTime的)价值;
writer.WriteValue(d.ToString(YYYY-MM-DD));
}
}
Having this object :
public class Person {
public string FirstName { get; set; }
[DataType(DataType.Date)]
public DateTime Birthday { get; set; }
}
Returnin 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 ?
解决方案
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"));
}
}
这篇关于反序列化网页API 2日期时间只有部分日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文