2016-01-06 2 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); 

Когда я пытаюсь десериализации, мне нужно наблюдать OtherClass экземпляр в ReturnValue поле, но я получаю LinkedHashMap там. Я понимаю, что это вероятно из-за типа поля Object, но как заставить его получить фактический тип объекта, а не только Object?

+1

Что вы хотите сделать другим? можете ли вы показать небольшой пример и какой результат json? – Aviad

+0

Я удаляю тег весны, добавляю его обратно, если он вам действительно нужен, но включите некоторую информацию о том, как он относится к этому тегу в вопросе. – weston

ответ

-1

я не нашел изящное решение, поэтому я просто решил обрабатывать внутреннюю ссылку LinkedHashMap и обрабатывать ее вручную. Thanks

-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())); 

Результат: { "х": 0, "объект": {» тест ":" dsadas», "у": 5}}

Как вы можете видеть, что это прекрасно работает таким образом

EDIT: В случае г Эсериализация есть известные проблемы и обработка с этой ситуацией. Проблема в том, что gson не знает, как преобразовать json в .. Так что вам нужно отправить в gson тип, который вы хотите разобрать и построить deserizaler.

Что более распространено, так это создать интерфейс для этого другого класса. Значит, вы можете его пометить. Предположим, что IOtherClass

Теперь одним из полей для IOtherClass будет ТИП.

Вам нужно построить deseriaze для IOtherClass, и там вы сделаете преобразование в соответствии с типом. Это единственный способ сказать, что gson разобрать на

Посмотрите на эту тему: How to handle deserializing with polymorphism?

И это одна: Gson serialize a list of polymorphic objects

+0

Проблема, которую они имеют, заключается в десериализации. – weston

+0

Спасибо, но проблема в том, когда я десериализую родительский объект, объект clild - LinkedHashMap, но не объект с экземпляром AnotherClass, как мне нужно – avalon

+0

Я не могу создать интерфейс, в resultValue У меня может быть любой объект любого типа. Я думал, что есть способ определить фактический тип из экземпляра. – avalon

Смежные вопросы