Json序列化问题
public class Test2 {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
PluginSdkModel pluginSdkModel = new PluginSdkModel();
for (int i = 0; i < 3; i++) {
pluginSdkModel.setSdkId(123L);
if(i == 1){
pluginSdkModel.setModelDesc("wokao");
}
System.out.println(objectMapper.writeValueAsString(pluginSdkModel));
}
}
}
输出:
{"sdkId":123}
{"sdkId":123,"modelDesc":"wokao"}
{"sdkId":123,"modelDesc":"wokao"}
可以看到 第三个结果页输出了 modeDesc,原因是 序列化的时候,是把 对象的值 序列化成字符串,无法先把对象的值清空,所以 序列化 每次 初始化 object 是不现实的,也是无法 解决的问题;需要开发人员自己 优化代码来解决,比如上面的 代码 可以修改下:
for (int i = 0; i < 3; i++) {
pluginSdkModel.setSdkId(123L);
if(i == 1){
pluginSdkModel.setModelDesc("wokao");
}else { //这里加上 else 就可以解决 这个问题,否则 json框架是无法解决的
pluginSdkModel.setModelDesc(null);
}
System.out.println(objectMapper.writeValueAsString(pluginSdkModel));
}
Json 反序列化问题
序列化时,无法 先把 对象的值 修改成 null,再序列化;那么反序列化呢,发序列化 字符串 ---> object的过程,是可以先把 object清空,然后在序列化的;
Jackson 也 如我们预想的那样,做了这件事,这样可以有助于 最大化 帮住开发者减少bug;
public class Test {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
PluginSdkModel pluginSdkModel = new PluginSdkModel();
String json1 = "{\"sdkId\":123}";
String json2 = "{\"sdkId\":123,\"modelDesc\":\"wokao\"}";
for (int i = 0; i < 2; i++) {
pluginSdkModel = objectMapper.read(json2, PluginSdkModel.class);
System.out.println(objectMapper.writeValueAsString(pluginSdkModel));
pluginSdkModel = objectMapper.readValue(json1, PluginSdkModel.class);
System.out.println(objectMapper.writeValueAsString(pluginSdkModel));
}
}
}
输出:
{"sdkId":123,"modelDesc":"wokao"}
{"sdkId":123}
{"sdkId":123,"modelDesc":"wokao"}
{"sdkId":123}
可以看到 objectMapper.readValue(json2, PluginSdkModel.class); 时,每次 产生一个 全新的 pluginSdkModel,在Java里 是 内存自动管理的,可以这么搞,在Delphi里 不方便这么搞,但是 可以 反序列化时,清空 源 object 里的 每一个字段;从而帮助开发者减少bug,实现与Java里 一样的效果;
标签:PluginSdkModel,pluginSdkModel,Json,123,sdkId,注意事项,序列化,objectMapper From: https://www.cnblogs.com/del88/p/18329843