C# 使用 Newtonsoft.Json 對DataTable轉換中文亂碼問題的解決


      今天在做項目時,發現在特定的中文條件下,會出現亂碼,使前台轉換成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         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM