JavaScriptSerializer在序列化时会将DateTime的数据序列化成类似\/Date(626543800000)\/这样的值,找了很多方法都不如意,最后在一个博客找到了完美的解决方法,地址:http://blog.calyptus.eu/seb/2011/12/custom-datetime-json-serialization/,通过自定义类型转换器的方式转换成想要的格式,转换器代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | public 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 (!(obj is 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(); } } } |
然后注册一下就行了:
12 | public JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.RegisterConverters( new JavaScriptConverter[] { new DateTimeConverter() }); |
这样使用serializer序列化的对象中包含DateTime类型的值就会被转化成yyyy-MM-dd格式的字符串
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。