惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
I
InfoQ
B
Blog
WordPress大学
WordPress大学
Jina AI
Jina AI
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
Google Developers Blog
C
Check Point Blog
月光博客
月光博客
L
LangChain Blog
GbyAI
GbyAI

博客园 - sonicit

再写Javascript闭包 后台数据缓存的一点心得 Vue 数据双向绑定的误区 关于JS Pormise的认识 关于jqGrid中GridUnload方法的困惑 Javascript异步编程的4种方法 SQLServer 获得所有表结构(包括表名及字段) ACE代码编辑器,代码提示,添加自定义数据 利用闭包向post回调函数传参数 在seajs中使用require加载静态文件的问题 jqGrid标题行与第一行之间有很大空白的问题解决。 关于bootstrapValidator提交问题的解决 心得(一) 使用心得(一) MSSQL获得表的字段名称及其参数 Controller_Abstract的改造 QeePHP View视图的默认变量与新增变量 Delphi 的内存操作函数(5): 复制内存 Windows 7 安装VS2008 SP1 失败
C# 使用 Newtonsoft.Json 对DataTable转换中文乱码问题的解决
sonicit · 2021-11-26 · via 博客园 - sonicit

      今天在做项目时,发现在特定的中文条件下,会出现乱码,使前台转换成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         }