首页 > 代码库 > JavaScriptSerializer序列化成Json时DateTime类型数据的处理
JavaScriptSerializer序列化成Json时DateTime类型数据的处理
JavaScriptSerializer在序列化时会将DateTime的数据序列化成类似\/Date(626543800000)\/这样的值,找了很多方法都不如意,最后在一个博客找到了完美的解决方法,地址:http://blog.calyptus.eu/seb/2011/12/custom-datetime-json-serialization/,通过自定义类型转换器的方式转换成想要的格式,转换器代码如下:
+ View Code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | 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(); } } } |
然后注册一下就行了:
?
1 2 | public JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.RegisterConverters( new JavaScriptConverter[] { new DateTimeConverter() }); |
这样使用serializer序列化的对象中包含DateTime类型的值就会被转化成yyyy-MM-dd格式的字符串
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。