微软官方序列化与反序列化类库JsonSerializer的一些使用心得

一、常用的序列化与反序列化工具对比

Newtosoft.json在序列化与反序列化时会自动将前端传过来的字符串识别出大小写并将值转换出来,网上也说Newtonsoft.json的性能比微软官方的序列化工具性能更高,但实际我没有测试过。在使用的过程中,很明显的是Newtonsoft.Json要方便一些。

  1. Newtonsoft.Json的反序列化
Newtonsoft.Json.JsonConvert.DeserializeObject<StudentModel>(jsonstr);

只要这样就能够很轻松地实现反序列化的功能。

  1. JsonSerializer的反序列化
/*
* PropertyNamingPolicy---属性用于前端传过来的属性的格式策略,目前内置的仅有一种策略CamelCase
* PropertyNameCaseInsensitive---属性可以忽略大小写格式
* JsonSerializerOptions---用于Json反序列化时的一些规则
*/
JsonSerializerOptions options = new JsonSerializerOptions()
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    PropertyNameCaseInsensitive = true
};
System.Text.Json.JsonSerializer.Deserialize<StudentModel>(jsonstr, options);

两者对比可以很明显的发现使用上哪一种 更简单,如果JsonSerializer想要实现转换部分大小写,还必须另外声明出一个JsonSerializerOptions的对象。另外还有以下一些其他属性,可以自己去看JsonSerializer官方教程
JsonSerializerOptions中的其他属性
但是官方表示如果设置PropertyNameCaseInsensitive 这个属性为true后会降低性能,具体降低多少大家可以自行测试。网上使用这个类库时大小写不一致的问题时,通常的解决办法是在属性上加上特性:

public class BaiduReverseGeocodeResponse
{
    [JsonPropertyName("status")]
    public int Status { get; set; }
    [JsonPropertyName("result")]
    public BaiduReverseGeocodeResponseResult Result { get; set; }
}

二、总结

个人理解:JsonSerializer的拓展性和灵活性可能比Newtonsoft.Json更高一些。

你可以根据自己的业务需求去自定义自己所需要的JsonConverter转换器。当然如果仅仅是对于前后端传值时的序列化与反序列化操作,其实我个人觉得Newtonsoft.Json更合适。
在Asp.NetCore中你可以直接这样使用:

// 支持请求参数通过有参构造函数反序列化
services.AddControllers().AddNewtonsoftJson();

这样就能直接在API中直接写对象,很方便。
如果实在有很特殊的序列化与反序列化操作可以使用JsonSerializer去自定义拓展,当然Newtonsoft.Json中可能也有,知道的小伙伴欢迎分享。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值