# 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}

# Newtonsoft.Json 有个细微的变化,没有 get;set; 访问器的字段调整到了前面

# 而 System.Text.Json 直接不给 Name 字段赋值了甚至 Json 中不存在这个字段了

慢羊羊

更新于 阅读次数

请我喝茶~( ̄▽ ̄)~*

Tianci 微信支付

微信支付

Tianci 支付宝

支付宝