最近,我在做一个我们一个产品的OTA的功能,在调试跟后台对接Json数据的时候,发现序列化的数据一直跟期待的不一致。这让我很纳闷,明明一个简单的序列化和反序列化的问题,怎么数据就不对了。于是乎,就直接导入组件,一步步排查了。
1、由于我是直接调用我们小伙伴的组件,进行Json序列化的,小伙伴的Json 序列化的参数名是调用 System.Text.Json.Serialization.JsonPropertyName 进行Json的一个转义,如下图

2、我查看了我们的下载的组件,由于去年做了一个优化的功能,在Net6以上的版本,用的是
using System.Text.Json
NetFramework版本,用的是
using Newtonsoft.Json;

而我当前的项目用的是NetFramework的版本,应该是调用的 Newtonsoft.Json。
调用结果如下图,终于知道问题所在。

由于我们的类里边的转义是调用的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、序列化的协议,和定义的字段,最好跟序列化的字段保持一致,能够避免序列化异常的问题