2016-01-06 53 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