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 (!(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(); } } }
然後注冊一下就行了:
public JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new JavaScriptConverter[] { new DateTimeConverter() });
這樣使用serializer序列化的對象中包含DateTime類型的值就會被轉化成yyyy-MM-dd格式的字符串