Newtonsoft.Json这个包想必都很熟悉了
不管是序列化对象(对象转Json),还是反序列化对象(Json转对象)这都是最常用的第三方Nuget包
但如果需要的功能仅限于此的话,不妨试试微软内置的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"}
将代码添加配置
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":"张三"}
既然是差异当然不可以只举一个例子
现在我们修改刚刚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}
Newtonsoft.Json有个细微的变化,没有get;set;访问器的字段调整到了前面
而System.Text.Json直接不给Name字段赋值了甚至Json中不存在这个字段了