在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
今天在做项目时,发现在特定的中文条件下,会出现乱码,使前台转换成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 }
|
请发表评论