JavaScriptSerializer序列化成Json时DateTime类型数据的处理


JavaScriptSerializer在序列化时会将DateTime的数据序列化成类似\/Date(626543800000)\/这样的值,找了很多方法都不如意,最后在一个博客找到了完美的解决方法,地址:http://blog.calyptus.eu/seb/2011/12/custom-datetime-json-serialization/,通过自定义类型转换器的方式转换成想要的格式,转换器代码如下:

 

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114public class DateTimeConverter : JavaScriptConverter{     public override object Deserialize(IDictionary<string,object> dictionary, Type type, JavaScriptSerializer serializer)    {        return new JavaScriptSerializer().ConvertToType(dictionary, type);    }     public override IDictionary<string,object> Serialize(object obj, JavaScriptSerializer serializer)    {        if (!(objis DateTime))return null;        return new CustomString(((DateTime)obj).ToString("yyyy-MM-dd"));    }     public override IEnumerable<Type> SupportedTypes    {        get {return new[] { typeof(DateTime) }; }    }     private class CustomString : Uri, IDictionary<string,object>    {        public CustomString(string str)            :base(str, UriKind.Relative)        {        }         void IDictionary<string,object>.Add(string key,object value)        {            throw new NotImplementedException();        }         bool IDictionary<string,object>.ContainsKey(string key)        {            throw new NotImplementedException();        }         ICollection<string> IDictionary<string,object>.Keys        {            get {throw new NotImplementedException(); }        }         bool IDictionary<string,object>.Remove(string key)        {            throw new NotImplementedException();        }         bool IDictionary<string,object>.TryGetValue(string key,out object value)        {            throw new NotImplementedException();        }         ICollection<object> IDictionary<string,object>.Values        {            get {throw new NotImplementedException(); }        }         object IDictionary<string,object>.this[string key]        {            get            {                throw new NotImplementedException();            }            set            {                throw new NotImplementedException();            }        }         void ICollection<KeyValuePair<string,object>>.Add(KeyValuePair<string,object> item)        {            throw new NotImplementedException();        }         void ICollection<KeyValuePair<string,object>>.Clear()        {            throw new NotImplementedException();        }         bool ICollection<KeyValuePair<string,object>>.Contains(KeyValuePair<string,object> item)        {            throw new NotImplementedException();        }         void ICollection<KeyValuePair<string,object>>.CopyTo(KeyValuePair<string,object>[] array, int arrayIndex)        {            throw new NotImplementedException();        }         int ICollection<KeyValuePair<string,object>>.Count        {            get {throw new NotImplementedException(); }        }         bool ICollection<KeyValuePair<string,object>>.IsReadOnly        {            get {throw new NotImplementedException(); }        }         bool ICollection<KeyValuePair<string,object>>.Remove(KeyValuePair<string,object> item)        {            throw new NotImplementedException();        }         IEnumerator<KeyValuePair<string,object>> IEnumerable<KeyValuePair<string,object>>.GetEnumerator()        {            throw new NotImplementedException();        }         IEnumerator IEnumerable.GetEnumerator()        {            throw new NotImplementedException();        }    }}

  

 然后注册一下就行了:

 

12public JavaScriptSerializer serializer = new JavaScriptSerializer();serializer.RegisterConverters(new JavaScriptConverter[] { new DateTimeConverter() });

  

这样使用serializer序列化的对象中包含DateTime类型的值就会被转化成yyyy-MM-dd格式的字符串

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告