每个JSON可序列化Java对象都可以表示为映射吗<;字符串,对象>;?
我有一堆Java对象正在用Jackson进行序列化。所有序列化类型如下所示:每个JSON可序列化Java对象都可以表示为映射吗<;字符串,对象>;?,java,json,jackson,Java,Json,Jackson,我有一堆Java对象正在用Jackson进行序列化。所有序列化类型如下所示: class MySampleClass { @JsonProperty("propName1") private MyCustomType propName1; @JsonProperty("propName2") private MyOtherCustomType propName2; @JsonCreator public MySampleClass(@JsonP
class MySampleClass {
@JsonProperty("propName1")
private MyCustomType propName1;
@JsonProperty("propName2")
private MyOtherCustomType propName2;
@JsonCreator
public MySampleClass(@JsonProperty("propName1") MyCustomType propName1, @JsonProperty("propName2") MyOtherCustomType propName2) {
this.propName1 = propName1;
this.propName2 = propName2;
}
}
是否存在这样的情况:将此类实例转换为
映射,然后将映射转换为JSON将无法反序列化回原始Java对象?这样做,除非您接收到这些对象的数组。如果是这种情况,那么您可以使用MySampleClass[]
JSON在RFC 7159中定义。从这里开始:
对象是零个或多个名称/值的无序集合
配对,其中名称是字符串,值是字符串,数字,
布尔值、空值、对象或数组
(强调矿山)
因此,JSON对象必须具有字符串作为键,并且值可以是少数对象类型之一。这取决于我们用于在Map
之间进行转换的框架/逻辑。如果序列化时使用toString()
,则结果输出可能与原始json不同。Jackson用于序列化映射/对象。在这种情况下,应该可以。正如我在原始问题中所述,Java对象和map
是相同的。但是,如果字段或类具有附加的Jackson注释,例如@JsonSerialize(使用=WhateverSerializer.class)
,则它们不是等效的。