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         }
  • 相关阅读:
    DEDECMS里面DEDE函数解析
    dede数据库类使用方法 $dsql
    DEDE数据库语句 DEDESQL命令批量替换 SQL执行语句
    织梦DedeCms网站更换域名后文章图片路径批量修改
    DSP using MATLAB 示例 Example3.12
    DSP using MATLAB 示例 Example3.11
    DSP using MATLAB 示例 Example3.10
    DSP using MATLAB 示例Example3.9
    DSP using MATLAB 示例Example3.8
    DSP using MATLAB 示例Example3.7
  • 原文地址:https://www.cnblogs.com/sonicit/p/15609735.html
Copyright © 2011-2022 走看看