关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题

笔记哥 / 05-25 / 50点赞 / 0评论 / 945阅读
最近,我在做一个我们一个产品的OTA的功能,在调试跟后台对接Json数据的时候,发现序列化的数据一直跟期待的不一致。这让我很纳闷,明明一个简单的序列化和反序列化的问题,怎么数据就不对了。于是乎,就直接导入组件,一步步排查了。 1、由于我是直接调用我们小伙伴的组件,进行Json序列化的,小伙伴的Json 序列化的参数名是调用 System.Text.Json.Serialization.JsonPropertyName 进行Json的一个转义,如下图 ![](https://cdn.res.knowhub.vip/c/2505/25/42cd6956.png?G1cAAER17rxgXRmIfice0wSBBJsBizSCSgnr9fz%2f2pfI%2bzlBi%2fdoffr%2b8JvWp4uipKJVCGZkhMCsJSmhhwUC1ZKd1LiGAw%3d%3d)  2、我查看了我们的下载的组件,由于去年做了一个优化的功能,在Net6以上的版本,用的是  ```csharp using System.Text.Json ``` NetFramework版本,用的是  ```csharp using Newtonsoft.Json; ``` ![](https://cdn.res.knowhub.vip/c/2505/25/aeb5f020.png?G1YAAOQ8bZy4%2b4lt1OHaRJHQDEhkEVRKWK%2f33n0awPcHI2t%2bZh8rzoe%2f9LECCF2cKjCyoSF5NnIxLaicKqmpFqG8ZwA%3d)  而我当前的项目用的是NetFramework的版本,应该是调用的 Newtonsoft.Json。 调用结果如下图,终于知道问题所在。 ![](https://cdn.res.knowhub.vip/c/2505/25/a9915b5d.png?G1cAAMTW3DgpPAhZ22gDdWfqnTUDFmkElRLW6%2fn%2ftS%2bi9wthKfkerc%2fYH37T%2bgwCuzoqCYuxIQUxuJ4o4CPBDPCqrHmNAA%3d%3d)  由于我们的类里边的转义是调用的System.Text.Json.Serialization.JsonPropertyName,在用  Newtonsoft.Json.JsonConvert.SerializeObject 的时候,是不会被识别并转成序列化属性名参数的字段的 对应的参数如下 **System.Text.Json.Serialization.JsonPropertyName  ==>   System.Text.Json.JsonSerializer.Serialize** **Newtonsoft.Json.JsonProperty  ==> Newtonsoft.Json.JsonConvert.SerializeObject** **总结:** 1、在对于序列话和反序列化中,一定要按照一套的序列化方案实现。由于每一个Json序列化的组件都有可能自己定义修改,存在不兼容的问题 2、序列化的协议,和定义的字段,最好跟序列化的字段保持一致,能够避免序列化异常的问题