2016-01-06 54 views
2

我有下面的代碼片段:對象字段反序列化與GSON

public class MyClass{ 

private Object returnValue; 

//getters setters 

} 

Gson gson=...; 
MyClass cl=new MyClass(); 

cl.setResultValue(***new OtherClass()***); 

gson.toJson(cl,MyClass.class); 

當我嘗試反序列化,我需要的returnValue實地觀摩OtherClass實例,但我得到的LinkedHashMap那裏。我明白這可能是因爲Object字段類型,但如何強制它獲取實際類型的對象,而不僅僅是Object?

+1

你傳遞的otherObject是什麼?你可以展示一個小例子以及json的結果嗎? – Aviad

+0

我正在刪除spring標籤,如果您確實需要它,請將其添加回去,但在問題中包含有關它如何與該標籤相關的一些信息。 – weston

回答

-1

我沒有找到任何優雅的解決方案,所以我決定處理內部LinkedHashMap並手動處理它。謝謝

-1

眼光放在下一個流程我已經做

public class SomeClass { 

    private int x; 
    private Object object; 

    public SomeClass(Object object) { 
     this.object = object; 
    } 

} 

public class AnotherClass { 

    private String test; 
    private int y; 

    public AnotherClass() { 
     test = "dsadas"; 
     y = 5; 
    } 

} 

當我做了下:

gson.toJson(new SomeClass(new AnotherClass())); 

結果是:{ 「X」:0, 「對象」:{」考 「:」 dsadas」, 「Y」:5}}

正如你可以看到它工作正常,這樣

編輯: 在d的情況下,串行化存在已知的問題並處理這種情況。 gson不知道將json轉換爲什麼的問題。因此,您必須發送gson您想要解析的類型並構建deserizaler。

什麼是更常見的是爲這個其他類創建接口。所以你可以標記它。讓我們說IOtherClass

現在IOtherClass的一個字段將是TYPE。

您需要爲IOtherClass構建deseriaze,然後您將根據類型進行轉換。 這是告訴GSON什麼解析到

看待這個線程的唯一方法:How to handle deserializing with polymorphism?

這一個:Gson serialize a list of polymorphic objects

+0

他們的問題在於反序列化。 – weston

+0

謝謝,但問題是當我反序列化父對象,clild對象是LinkedHashMap,但不是對象與AnotherClass的實例像我需要 – avalon

+0

我不能做一個接口,在resultValue我可能有任何類型的任何對象。我認爲有一種方法可以從實例中確定實際的類型。 – avalon