gson не может десериализовать простой интерфейс

1

У меня очень простой интерфейс Java:

public interface GeographicalArea {
 java.lang.String getTown();
 java.lang.String getProvince();
 java.lang.String getStreet();
 java.lang.String getStreetNumber();
 float getLongitude();
 float getLatitude();
 java.lang.String getPhoneNumber();
 void setTown(java.lang.String s);
 void setProvince(java.lang.String s);
 void setStreet(java.lang.String s);
 void setStreetNumber(java.lang.String s);
 void setLongitude(float v);
 void setLatitude(float v);
 void setPhoneNumber(java.lang.String s);
}

с соответствующей простой реализацией:

public class GeographicalAreaImpl implements GeographicalArea {
  private java.lang.String town;
  private java.lang.String province;
  private java.lang.String street;
  private java.lang.String streetNumber;
  private float longitude;
  private float latitude;
  private java.lang.String phoneNumber;

  public GeographicalAreaImpl() { ...  [compiled code]
  public java.lang.String getTown() { ... [compiled code]
 ... all the other getters and setters declared in the Interface

У меня нет исходного кода: я получил их в банке, которую мне нужно использовать.

Чтобы десериализовать интерфейсы java, которые я получаю, я создал InstanceCreator:

public class InstanceCreatorGeographicalArea implements 
   InstanceCreator<GeographicalArea> {
       @Override
       public GeographicalArea createInstance(Type type) {
          return new GeographicalAreaImpl();
       }
   }

и зарегистрируйте его с помощью:

 GsonBuilder builder = new GsonBuilder();
 builder.registerTypeAdapter(GeographicalArea.class, new InstanceCreatorGeographicalArea());
 ...
  Gson gson = builder.create();

Тем не менее, gson терпит неудачу при десериализации данных, которые я получаю: он не дает ошибок, но все поля остаются пустыми /null.

Я не эксперт в Gson, но из документации, которую я прочитал, я сделал то, что должен был делать.

Что я сделал не так?

Теги:
gson

1 ответ

0

Вы читали: 1) http://www.javacodegeeks.com/2012/04/json-with-gson-and-abstract-classes.html 2) Gson десериализует вложенные объекты с помощью InstanceCreator?

Ошибка, видимо, может быть в этой строке:

builder.registerTypeAdapter(GeographicalAreaImpl.class, новый......

используйте реализацию, а не интерфейс, и в InstanceCreatorGeographicalArea используйте этот метод: public GeographicalAreaImpl createInstance (тип arg0) {return new GeographicalAreaImpl(); } }

Класс тестирования

    public static void main(String[] args) {
    GeographicalArea ga = new GeographicalAreaImpl();
    ga.setLatitude(25);
    ga.setLongitude(2);
    ga.setPhoneNumber("2344");
    ga.setProvince("xxx");
    ga.setStreet("yyyyy");
    ga.setStreetNumber("2");
    ga.setTown("zzzzzzz");
    Gson gson = new Gson();
    String userJson = gson.toJson(ga);
    GsonBuilder builder = new GsonBuilder();
    builder.registerTypeAdapter(GeographicalAreaImpl.class, new InstanceCreatorGeographicalArea());
    Gson parser = builder.create();
    GeographicalArea request = parser.fromJson(userJson, GeographicalAreaImpl.class);
    System.out.println("Latitude " + request.getLatitude());
}

Вывод:

Latitude 25.0    

Класс InstanceCreatorGeographicalArea ::

public class InstanceCreatorGeographicalArea implements InstanceCreator<GeographicalAreaImpl> {
        @Override
        public GeographicalAreaImpl createInstance(Type arg0) {
            return new GeographicalAreaImpl();
        }

}

  • 0
    Пожалуйста, добавьте немного больше информации о том, что содержат ваши ссылки.
  • 0
    Нет, я не читал их, но теперь у меня есть: я не мог найти подсказку о том, как решить мою проблему. Содержат ли они решение?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню