zoukankan      html  css  js  c++  java
  • 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         }
  • 相关阅读:
    IE浏览器下报错: strict 模式下不允许一个属性有多个定义
    Vue 做的项目在IE下面打开一片空白解决方法
    小程序如何动态修改标题navigationBarTitleText
    小程序-for循环遍历的使用
    vue项目-打印页面中指定区域的内容(亲测有效!)
    vue省市区三级联动(高仿京东)
    vue-父组件向子组件传值
    Sea.js 手册与文档
    angular之模块开发二
    angular之跨域
  • 原文地址:https://www.cnblogs.com/sonicit/p/15609735.html
Copyright © 2011-2022 走看看