一、常用的序列化与反序列化工具对比
Newtosoft.json在序列化与反序列化时会自动将前端传过来的字符串识别出大小写并将值转换出来,网上也说Newtonsoft.json的性能比微软官方的序列化工具性能更高,但实际我没有测试过。在使用的过程中,很明显的是Newtonsoft.Json要方便一些。
- Newtonsoft.Json的反序列化
Newtonsoft.Json.JsonConvert.DeserializeObject<StudentModel>(jsonstr);
只要这样就能够很轻松地实现反序列化的功能。
- 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官方教程
但是官方表示如果设置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中可能也有,知道的小伙伴欢迎分享。