JQuery二维码插件(前台生成)

时间:2022-01-05 23:27:05

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

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 (!(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();         }     } }  然后注册一下就行了:

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

  

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