2016-04-19 2 views
2

Я хочу сериализовать Java-объект JSON с помощью библиотеки GSON от Google. Он отлично работает, если не встречается ArrayList. GSON не может обрабатывать общий тип ArrayList. @Явор Георгиев описал решение с помощью метода registerSerializer (...), но этот метод не существует в новых выпусках.Сериализация ArrayList (общие типы) с помощью GSON

gson.registerSerializer(ArrayList.class, new CollectionSerializer<Object>()); 

http://hashtagfail.com/post/44606137082/mobile-services-android-serialization-gson

В моем случае ArrayList вложен в классе три слоя под объектом, который передается toJSON(...).

Кто-нибудь знает, как решить эту проблему?

структура такова:

public class Data() { 
    @Expose 
    privat int number = 8; 
    @Expose 
    private Foo foo = new Foo(); 
} 

public class Foo() { 
    @Expose 
    private Bar bar = new Bar(); 
} 

import java.awt.Point; 
public class Bar() { 
    @Expose 
    ArrayList<Point> list = new ArrayList()<>; 
} 
+1

Пожалуйста, обратитесь это - http://stackoverflow.com/questions/20773850/gson-typetoken-with-dynamic-arraylist-item-type –

+0

В его случае он может определяет тип непосредственно, потому что он только хочет для преобразования объекта 'src' как' toJSON (src, type) '. Но в моем случае объект 'data' не имеет типа' ArrayList', это 'Data'. – Baschdl

+0

читать api на GsonBuilder. метод registerTypeAdapter кажется многообещающим – DwB

ответ

1

Вы пробовали регистрации адаптера.

new GsonBuilder().registerTypeAdapter(Object.class, new JsonSerializer<Object>() { 
      @Override 
      public JsonElement serialize(Object src, Type typeOfSrc, JsonSerializationContext context) { 
       return context.serialize(src); 
      } 
     }) 
+0

Но я не уверен, что эта работа для вас уже пробовала egisterSerializer (ArrayList.class, новый CollectionSerializer ()); который, я думаю, делает тот же самый тигр –