Noa*_*oam 7 java serialization json jackson
我们使用与Jackson的JSON序列化来公开系统的内部状态以调试属性.
默认情况下,jackson不会序列化瞬态字段 - 但我也希望将它们序列化.如何序列化这些字段?
我知道的一种方法是为这些字段提供getter - 但我不想这样做,因为我有一些我不想被调用的getX方法(例如,有一些getter改变了对象国家).
我知道我可以创建一个注释,但我真的想避免它.
所以我的问题是:有没有办法设置杰克逊序列化所有对象字段?包括短暂的.
Ger*_*ere 11
我对Jackson 2.4.3的解决方案:
private static final ObjectMapper mapper =
new ObjectMapper(){{
Hibernate4Module module = new Hibernate4Module();
module.disable(Hibernate4Module.Feature.USE_TRANSIENT_ANNOTATION);
registerModule(module);
}};
Run Code Online (Sandbox Code Playgroud)
我不认为杰克逊支持任何类型的配置,使其能够序列化瞬态字段.添加该功能有一个悬而未决的问题,但它已经过时并且尚未得到解决(据我所知):http://jira.codehaus.org/browse/JACKSON-623
所以我的问题是:有没有办法设置杰克逊序列化所有对象字段?包括短暂的.
所以回答你的问题,没有.
其他一些Java JSON工具(如GSON)支持配置选项以序列化瞬态字段.如果您可以使用其他工具,则可以查看(对于GSON,请参阅:https://sites.google.com/site/gson/gson-user-guide).
要扩展一点,您可以尝试不同的方法.
首先,您不应该尝试序列化瞬态字段.在瞬态的所有定义之后是"不要序列化这个".不过,我可以想到一些可能需要的特定情况,或者至少方便(比如使用代码时无法修改等).尽管如此,在99%的案例中,答案是不这样做.如果需要序列化,请更改字段,使其不是瞬态的.如果您有多个使用相同字段的上下文,并且您希望将其序列化为一个(例如JSON),而不是另一个(例如java.io)中的序列化,那么您应该为这种情况创建自定义序列化程序你不想要它,而不是滥用关键字.
其次,对于使用吸气剂和"一些改变物体状态的吸气剂",你应该尽量避免这种情况.这可能会导致各种意想不到的后果.而且,从技术上讲,这不是一个吸气剂,那是一个制定者.我的意思是,如果它改变状态,你有一个mutator(setter)而不是accessor(getter),即使你按照"get"约定命名并返回一些东西.
| 归档时间: |
|
| 查看次数: |
6578 次 |
| 最近记录: |