如果你想为NULL就排除该属性,我没这么干过。如果你要这么做,以你用的DataContractJsonSerializer类,你需要给那个属性添加一个特性,这个需要用到反射,而且我还不知道能不能成功。
还有你为什么一定要用DataContractJsonSerializer,如果你想简单的进行序列化,完全可以用JavaScriptSerializer
jackson中,指定包含哪些属性、忽略哪些属性的注解:
用于标记忽略一个或多个属性。可以注解在类上、构造函数、方法、字段上。
@JsonIgnore注解用于在字段级别标记要忽略的属性。注意:系列化和反系列化时都会被忽略。
1、bean
2、测试
3、控制台输出
反系列化时,json数据中明明包含了category值,但是最后Article对象的category属性值依然为null。就是因为使用了JsonIgnore。
我们可以使用@JsonInclude排除某些empty、null、默认值的属性。
2、controller
没有在Result类上加 @JsonInclude(JsonInclude.Include.NON_NULL) 注解时,返回的响应:
加了之后的返回的响应:
默认情况下,jackson获取public权限的字段进行系列化和反系列化。如果没有public权限的字段,就会去获取public修饰的getter/setter。使用 JsonAutoDetect注解,我们就可以修改默认的行为。比如,下面的案例,即使字段都是private的、也没有getter/setter,也照样获取字段。
1、bean
首先,我们定义一个属性id/name都私有的而且没有getter/setter的一个bean
2、反系列化测试:
报错:
3、系列化测试
报错:
4、bean上加上注解
5、再次分别测试反系列化、系列化
都运行正常,分别打印:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)