今天在做項目時,發現在特定的中文條件下,會出現亂碼,使前台轉換成JSON對象是出錯。
剛開始以為是數據庫字段中,有特殊的字符導致,最后測試后發現,數據庫查詢的JSON字符串可以正常解析,說明問題在后台轉換上。
因為后台DataTable轉換使用Newtonsoft.Json ,且使用轉換器進行特定數據的轉換。解決方法很簡單看下面的代碼
1 public class MiniDateTimeConverter : DateTimeConverterBase 2 { 3 public string DateTimeFormat { get; set; } 4 5 private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter(); 6 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 7 { 8 dtConverter.DateTimeFormat = DateTimeFormat; 9 return dtConverter.ReadJson(reader, objectType, existingValue, serializer); 10 } 11 12 public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 13 { 14 serializer.StringEscapeHandling = StringEscapeHandling.EscapeNonAscii; // 解決中文不出現亂碼的問題 15 DateTime dateTime = (DateTime)value; 16 if (value.GetType().FullName == "System.DBNull")// || dateTime.ToString("yyyy-MM-dd HH:mm:ss") == "1900-01-01 00:00:00") 17 { 18 writer.WriteValue(string.Empty); 19 } 20 else 21 { 22 dtConverter.DateTimeFormat = DateTimeFormat; 23 dtConverter.WriteJson(writer, value, serializer); 24 } 25 } 26 27 public override bool CanRead 28 { 29 get 30 { 31 return false; 32 } 33 } 34 /// <summary> 35 /// 是否允許轉換JSON字符串時調用 36 /// </summary> 37 public override bool CanWrite 38 { 39 get 40 { 41 return true; 42 } 43 } 44 }