C# newtonsoft.json中文乱码问号的解决方案

C#中使用newtonsoft.json库解析JSON数据时,经常会遇到中文乱码问题,导致JSON无法正确解析,出现问号或其它乱码字符的情况。下面介绍一些解决方案:

方案一:设置JsonSerializerSettings

实例化JsonSerializer时,可以传递一个JsonSerializerSettings对象来设置序列化/反序列化时的行为,其中的一个属性是Encoding。如果不指定默认为UTF8。

string jsonString = "{\"name\":\"张三\"}";
JsonSerializer serializer = new JsonSerializer();
// 设置JsonSerializerSettings的 Encoding 为 Unicode
serializer.Settings.Encoding = Encoding.Unicode;
Person person = serializer.Deserialize<Person>(new StringReader(jsonString));
Console.WriteLine(person.Name);    // 输出:张三

以上代码中,我们将JsonSerializerSettings对象的Encoding设置为Unicode,最终结果中的中文就能正常显示了。

方案二:使用JsonTextReader

另外一种解决方法是使用JsonTextReader来手动读取JSON数据,并设置其编码格式。

string jsonString = "{\"name\":\"张三\"}";
byte[] jsonBytes = Encoding.GetEncoding("gb2312").GetBytes(jsonString);
MemoryStream jsonStream = new MemoryStream(jsonBytes);
StreamReader jsonStreamReader = new StreamReader(jsonStream, Encoding.GetEncoding("gb2312"));
JsonTextReader reader = new JsonTextReader(jsonStreamReader) { SupportMultipleContent = true };
while (reader.Read())
{
    if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "name")
    {
        reader.Read();
        Console.WriteLine(reader.Value);    // 输出:张三
        break;
    }
}

以上代码中,首先将JSON字符串转换为指定编码的字节数组,并使用MemoryStream和StreamReader将其转换为一个可读取的流。然后创建一个JsonTextReader对象,并设置其支持多个JSON数据(例如数组)的解析,接着手动读取JSON数据,找到需要的信息后输出即可。

示例代码:

using Newtonsoft.Json;
using System;
using System.IO;
using System.Text;

namespace JsonDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 方案一示例代码
            string jsonString = "{\"name\":\"张三\"}";
            JsonSerializer serializer = new JsonSerializer();
            serializer.Settings.Encoding = Encoding.Unicode;
            Person person = serializer.Deserialize<Person>(new StringReader(jsonString));
            Console.WriteLine(person.Name);    // 输出:张三

            // 方案二示例代码
            jsonString = "{\"name\":\"张三\"}";
            byte[] jsonBytes = Encoding.GetEncoding("gb2312").GetBytes(jsonString);
            MemoryStream jsonStream = new MemoryStream(jsonBytes);
            StreamReader jsonStreamReader = new StreamReader(jsonStream, Encoding.GetEncoding("gb2312"));
            JsonTextReader reader = new JsonTextReader(jsonStreamReader) { SupportMultipleContent = true };
            while (reader.Read())
            {
                if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "name")
                {
                    reader.Read();
                    Console.WriteLine(reader.Value);    // 输出:张三
                    break;
                }
            }
        }
    }

    public class Person
    {
        public string Name { get; set; }
    }
}

以上就是C# newtonsoft.json中文乱码问号的解决方案。希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# newtonsoft.json中文乱码问号的解决方案 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • PHP Ajax中文乱码问题解决方法

    下面是详细讲解“PHP Ajax中文乱码问题解决方法”的完整攻略。 1. 问题现象 在使用PHP Ajax技术实现中文数据的传输过程中,可能会出现中文乱码问题,常见的表现为接收到的中文数据变成了一些乱码字符,影响了程序的正常运行。 2. 原因分析 中文乱码问题的产生是由于不同的字符编码方式导致的。当我们使用Ajax技术将数据从前端传递到后端时,如果前后端所使…

    html 2023年5月31日
    00
  • C#使⽤XmlReader和XmlWriter操作XML⽂件

    让我为你详细讲解C#使用XmlReader和XmlWriter操作XML文件的攻略。 1. XmlReader XmlReader可以以只读(read-only)的方式读取XML文档,使用这种方式不需要将整个XML文件加载到内存中,所以它可以更加高效、灵活地读取XML数据。 1.1 创建XmlReader实例 我们可以通过XmlReader.Create方法…

    html 2023年5月30日
    00
  • C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)第1/2页

    C# XML操作 代码大全:读写XML、操作节点 读取XML文件 读取XML文件可以使用XmlDocument类和XmlReader类。 使用XmlDocument类 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("example.xml"); // 加载文件 XmlNodeLis…

    html 2023年5月30日
    00
  • Spring Boot整合Thymeleaf详解

    让我们来详细讲解 Spring Boot 整合 Thymeleaf 的完整攻略。 步骤一:创建 Spring Boot 项目 首先,我们需要创建一个 Spring Boot 项目。可以使用 Spring Boot 官方提供的 Web 页面来生成项目:Spring Initializr。在这个页面中,我们需要填写一些基本的项目信息:项目名称、类型、包名,还可以…

    html 2023年5月30日
    00
  • C#中XML基础用法

    下面是关于“C#中XML基础用法”的完整攻略。 什么是XML XML stands for eXtensible Markup Language(可扩展标记语言),是一种用于传输数据和存储数据的标记语言。它是一种非常灵活的语言,可以利用它来定义自己的标记,创建自定义结构的文档,以及存储和传输数据。XML文档由嵌套的元素和属性组成,每个元素都由一个起始标记和一…

    html 2023年5月30日
    00
  • CentOS终端命令行显示中文乱码的解决方法

    以下是“CentOS终端命令行显示中文乱码的解决方法”的完整攻略。 问题描述 在 CentOS 终端命令行输入中文时,可能会出现乱码现象,给操作和查询带来不便。 解决方法 在 CentOS 终端命令行显示中文乱码的问题,可以通过以下步骤进行解决: 确认 CentOS 系统中已经安装了中文字体,可以通过以下命令进行确认: fc-list :lang=zh 若返…

    html 2023年5月31日
    00
  • C#通过XML节点属性/属性值读取写入XML操作代码实例

    下面我将为您详细讲解”C#通过XML节点属性/属性值读取写入XML操作代码实例”的完整攻略。 什么是XML XML是一种标记语言,用于描述数据的结构和内容。它是一种元素,属性和文本的组合。XML文档由一个根元素开始,并具有唯一结束标记。XML是可扩展的,可用于存储和传输任何类型的数据。 读取XML节点属性/属性值 读取XML节点属性/属性值是通过使用C#的X…

    html 2023年5月30日
    00
  • HTML表格标记教程(11):水平对齐属性ALIGN

    接下来我将详细讲解“HTML表格标记教程(11):水平对齐属性ALIGN”的完整攻略。 水平对齐属性ALIGN 在HTML表格中,通过水平对齐属性ALIGN可以控制表格中各个单元格的水平对齐方式,属性值为left、center、right三种取值。 left:单元格内内容左对齐; center:单元格内内容居中对齐; right:单元格内内容右对齐。 示例说…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部