反序列化网页API 2日期时间只有部分日期 [英] Deserialize only Date part of DateTime in web api 2

查看:92
本文介绍了反序列化网页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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆