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日

相关文章

  • python对XML文件的操作实现代码

    当我们需要处理XML(一种标记语言)时,Python提供了一组强大的库来操作它。以下是一些Python库,可以用于操作XML文件: xml.etree.ElementTree xml.dom.minidom xml.dom.pulldom xml.sax 其中,xml.etree.ElementTree和xml.dom.minidom是两个最常用的库来操作X…

    html 2023年5月30日
    00
  • python批量修改xml属性的实现方式

    针对“Python批量修改XML属性的实现方式”的问题,我们可以按照以下步骤来实现: 1. 解析XML文件 首先,我们需要使用Python内置库xml.etree.ElementTree来加载待处理的XML文件,并将其解析为一个树形结构,这样我们才能更方便地操作其中的元素和属性。 示例代码如下: import xml.etree.ElementTree as…

    html 2023年5月30日
    00
  • json跟xml的对比分析

    下面就为大家介绍一下“JSON跟XML的对比分析”。 什么是JSON? JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。JSON以文本格式进行数据传输,具有易读性、易解析和易于结构化等特点。在前后端数据交互、API接口传输等方面使用广泛。 什么是XML? XML,全称Extensible Markup Lang…

    html 2023年5月30日
    00
  • Javabean基于xstream包实现转XML文档的方法

    Javabean基于xstream包实现转XML文档的方法是常见的数据转换操作,以下是该操作的详细攻略。 准备工作 在开始操作前,我们需要进行一些准备工作。首先,准备一个Java类,该类的字段需要与XML文档的元素名及结构相对应。其次,我们需要引入xstream包,该包提供了Java对象到XML文档的转化功能。 在Maven项目中,可通过以下依赖方式引入xs…

    html 2023年5月30日
    00
  • javascript+xml实现简单图片轮换(只支持IE)

    我将为您详细讲解“javascript+xml实现简单图片轮换(只支持IE)”的完整攻略。 背景知识 在讲解实现过程之前,我们需要先了解一些背景知识: JavaScript:一种编程语言,可以在网页中运行,用来实现交互效果、表单验证等功能。 XML:可扩展标记语言,可以用来定义各种格式和结构化数据。 图片轮换:指在网页中切换不同的图片,从而达到一定的展示效果…

    html 2023年5月30日
    00
  • 一个用于MySQL的PHP XML类

    下面是一个用于MySQL的PHP XML类的完整攻略: 1. 简介 在PHP中,操作XML文档是一个常见任务。同时,PHP也支持MySQL数据库,因此在某些情况下,我们可能需要将MySQL中的数据转换为XML格式进行处理。一个用于MySQL的PHP XML类便是为此目的而设计的工具。 2. 安装 在使用该类之前,需要先下载并安装PHP的XML扩展。可以通过下…

    html 2023年5月30日
    00
  • JS cookie中文乱码解决方法

    我来详细讲解一下JS cookie中文乱码解决方法的完整攻略。 什么是JS cookie? 在介绍解决方法之前,我们需要先了解什么是JS cookie。Cookie 指的是服务器发送到用户浏览器上的一小段信息,它会在浏览器中保存一段时间,并且每次用户访问同一页面时都会被发送给服务器,用于进行特定的功能,比如记住用户的登录状态。 在 JavaScript 中,…

    html 2023年5月31日
    00
  • Xpath语法格式总结

    Xpath语法格式总结 Xpath(XML Path Language)是一门用于在XML文档中定位节点的语言,也被用于HTML文档中的Web页面抓取。下面详细讲解Xpath语法的使用格式。 基本语法 Xpath中主要有两种路径表达式:绝对路径和相对路径。 绝对路径 绝对路径由根节点开始,通过逐级指定节点的名称来描述节点的路径,以下为绝对路径的格式: /pa…

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