微软官方序列化与反序列化类库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中可能也有,知道的小伙伴欢迎分享。

C#中,序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。C#提供了多种序列化反序列化的方式,其中最常用的是使用BinaryFormatter类进行二进制序列化反序列化。该类可以将对象序列化为简洁的字节流,并能够通过相同的格式化程序进行反序列化。 在序列化一个对象时,BinaryFormatter会将对象的类名、程序集和所有数据成员写入存储中。它还会处理对象之间的引用关系,确保同一对象不会被多次序列化。需要注意的是,被序列化的对象引用的所有对象都必须标记为Serializable,否则在序列化未标记的对象时会引发异常。 反序列化时,BinaryFormatter会根据序列化时写入的对象信息,将字节流转换回对象。反序列化过程中不会调用构造函数,这是为了性能考虑所做的约束。 要使用BinaryFormatter进行序列化反序列化,您需要创建一个流的实例和一个BinaryFormatter实例,并使用Serialize方法将对象序列化为字节流,将流和对象作为参数传递给Serialize方法。 需要注意的是,C#还提供了其他序列化反序列化的方式,例如XML序列化JSON序列化,它们分别使用XmlSerializer类和JsonSerializer类。这些类对于特定的序列化需求可能更加适用,但在一般情况下,使用BinaryFormatter是一种简单且高效的方式进行对象的序列化反序列化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C# - 序列化反序列化](https://blog.csdn.net/dodream/article/details/4729415)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值