# Newtonsoft.Json 这个包想必都很熟悉了
# 不管是序列化对象(对象转 Json),还是反序列化对象(Json 转对象)这都是最常用的第三方 Nuget 包
# 但如果需要的功能仅限于此的话,不妨试试微软内置的 System.Text.Json
# 可以查看教程将 Newtonsoft.Json 与 System.Text.Json 比较,并迁移到 System.Text.Json
# 下面用 Newtonsoft.Json 举个例子
class Person | |
{ | |
public int Id { get; set; } | |
public string Name { get; set;} | |
} | |
static void Main() | |
{ | |
var person = new Person | |
{ | |
Id = 1, | |
Name = "张三" | |
}; | |
Console.WriteLine("Newtonsoft.Json:{0}",JsonConvert.SerializeObject(person)); | |
Console.WriteLine("System.Text.Json:{0}", System.Text.Json.JsonSerializer.Serialize(person)); | |
Console.ReadKey(); | |
} |
# 控制台的结果
Newtonsoft.Json:{"Id":1,"Name":"张三"} | |
System.Text.Json:{"Id":1,"Name":"\u5F20\u4E09"} |
# System.Text.Json 默认是会转义的,参考如何使用 System.Text.Json 自定义字符编码
# 将代码添加配置
var options = new JsonSerializerOptions | |
{ | |
// 若要序列化所有语言集而不进行转义,请使用 UnicodeRanges.All | |
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) | |
}; | |
Console.WriteLine("带配置的System.Text.Json:{0}", System.Text.Json.JsonSerializer.Serialize(person, options)); |
# 控制台的结果
带配置的System.Text.Json:{"Id":1,"Name":"张三"} |
# 如果出现字段定义为大写,但是 Json 中为小写可以参考对所有 JSON 属性名称使用 camel 大小写
# 既然是差异当然不可以只举一个例子
# 现在我们修改刚刚 Person 类中的 Name 字段
class Person | |
{ | |
public int Id { get; set; } | |
/// <summary> | |
/// 去掉了 get;set; 访问器 | |
/// </summary> | |
public string Name; | |
} |
# 控制台的结果
Newtonsoft.Json:{"Name":"张三","Id":1} | |
System.Text.Json:{"Id":1} |