C# Newtonsoft.Json 中文乱码问号及 JSON 转类详解
在使用 C# 进行数据处理时,Newtonsoft.Json 是常用的序列化库。本文将重点解决序列化中文出现问号(乱码)的特定配置问题,并详细介绍如何高效地将任意 JSON 字符串转化为对应的 C# 强类型实体,通过实用工具和代码示例提升开发效率。
序列化中文乱码问号的解决方案
在使用 JsonConvert.SerializeObject 进行 JSON 序列化时,如果返回结果中的中文字符显示为问号或方框,通常是因为未正确处理非 ASCII 字符的编码策略。虽然 Newtonsoft.Json 默认支持 UTF-8,但在某些特定场景或版本行为中,显式设置字符逃避处理方式是确保中文正常展示的关键。
核心解决方法:
在序列化时,通过 JsonSerializerSettings 设置 StringEscapeHandling 属性。虽然对于纯中文输出,有时仅需保证流为 UTF-8 即可,但显式处理非 ASCII 字符可避免潜在的边缘情况:
string jsonstr = JsonConvert.SerializeObject(
gameinfo,
new JsonSerializerSettings() {
StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
});
此外,请确保接收端(如网页控制台或 API 响应头)正确声明了 Content-Type: application/json; charset=utf-8。
从 JSON 字符串反向生成 C# 类的技巧
除了基础的序列化,实际开发中更常见的需求是将获取到的 JSON 字符串反序列化为 C# 对象。手动编写复杂的嵌套类既耗时又容易出错。这里介绍一种利用在线工具辅助生成的标准化工作流。
第一步:解析 JSON 结构并预览层级
首先,需要确定目标 JSON 的准确结构。可以使用在线编辑器辅助查看 JSON 的键值层次关系,确认字段类型(字符串、数字、数组或对象)。
图示为在 JSON Edit Online 等工具中输入 JSON 字符串后的结构化视图,清晰的缩进和树状结构有助于理解数据层级。
第二步:构建对应的 C# 实体类
根据 JSON 的 Key 值定义相应的 Property。注意命名风格的一致性(建议使用 PascalCase 配合 [JsonProperty] 特性映射,或直接使用 JSON 原始 Key 命名),并确保集合类型使用泛型 List<T>。
代码示例:
class TestJson
{
public string name { get; set; }
public string url { get; set; }
public string page { get; set; }
public string isNonProfit { get; set; }
public Address address { get; set; }
public List<Link> links { get; set; }
}
class Address
{
public string street { get; set; }
public string city { get; set; }
public string country { get; set; }
}
class Link
{
public string name { get; set; }
public string url { get; set; }
}
第三步:执行反序列化转换
类定义完成后,直接使用 JsonConvert.DeserializeObject<T> 方法即可完成转换,无需额外配置即可自动匹配字段。
// Json 变量为获取到的 JSON 字符串
TestJson Test = JsonConvert.DeserializeObject<TestJson>(Json);
该方法会自动处理嵌套对象的实例化以及列表的填充,过程简洁高效。以上就是 C# Newtonsoft.Json 中文乱码解决及 JSON 转类的相关详细内容,更多关于 C# 网络编程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









