2014-02-15 43 views
1

請注意,通過序列化,我的意思是序列化爲JSON(JsonNode或其字符串表示形式)。Jackson:只序列化給定類的給定實例變量

這是傑克遜2.2.3。我的階級是這樣的:

public final class Foo 
{ 
    // the one and only instance variable 
    private final List<Bar> l; 

    // Allows deserialization with no problem at all 
    @JsonCreator 
    public Foo(final List<Bar> l) 
    { 
     this.l = ImmutableList.copyOf(l); 
    } 
} 

我已經知道如何序列化所有Bar實例(測試)。現在我需要能夠序列化一個Foo實例。

我已經能夠在此刻做的唯一一件事情就是「裝飾」 l@JsonSerialize註解,但是這給:

{ "l": [ { "serializedForm": "of bar1"}, { "serializedForm": "of bar2"} ] } 

而且我想:

[ { "serializedForm": "of bar1"}, { "serializedForm": "of bar2"} ] 

怎麼辦我做到了嗎?注意:我可以使用jackson-annotations

另請注意,我可以將第二個表單完美反序列化爲有效的實用Foo實例。

回答

1

{ "l": [ { "serializedForm": "of bar1"}, { serializedForm": "of bar2"} ] } 

public final class Foo 
{ 
    // the one and only instance variable 
    private final List<Bar> l; 
} 

正確串行化的JSON是包含名爲l一個JSON陣列,其中包含兩個其他JSON對象JSON對象。從Java的角度來看,這也是事實。您有一個Foo對象,其中包含一個名爲lList(對應於JSON數組),其中包含x Bar對象。

如果你真的想要這個JSON,請用@JsonValue註釋你的領域的吸氣劑。仔細閱讀javadoc,因爲有限制。例如,

一個類的至多一個方法可以用這個註解來註釋; 如果發現多於一個,則可能會拋出異常。

+0

對不起,但我不同意。我可以將Bar的JSON數組完全反序列化爲Foo。見[這裏](https://github.com/fge/json-patch/blob/master/src/main/java/com/github/fge/jsonpatch/JsonPatch.java#L121)。 – fge

+0

@fge在你的字段的getter上有'@ JsonValue'的解決方法。 –

+0

好的,但事情是,這個領域沒有getter:/ – fge

相關問題