Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每个JSON可序列化Java对象都可以表示为映射吗<;字符串,对象>;?_Java_Json_Jackson - Fatal编程技术网

每个JSON可序列化Java对象都可以表示为映射吗<;字符串,对象>;?

每个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

我有一堆Java对象正在用Jackson进行序列化。所有序列化类型如下所示:

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)
,则它们不是等效的。