Адаптер типа GSON против DeselalizerJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Адаптер типа GSON против Deselalizer

Сообщение Anonymous »

Пример ниже показан класс (клуб), который содержит коллекцию абстрактного класса (участник). Я запутался, нужен ли мне типографический разговор или JSondeserializer, чтобы правильно работать. Сериализация работает очень хорошо без помощи, но десериализация бросает исключения. Чтобы проиллюстрировать, я построил следующий тест «клон». Если бы кто -то мог показать рабочий пример, я был бы очень благодарен.package gson.test;
import java.util.ArrayList;

import com.google.gson.Gson;

public class Club {
public static void main(String[] args) {
// Setup a Club with 2 members
Club myClub = new Club();
myClub.addMember(new Silver());
myClub.addMember(new Gold());

// Serialize to JSON
Gson gson = new Gson();
String myJsonClub = gson.toJson(myClub);
System.out.println(myJsonClub);

// De-Serialize to Club
Club myNewClub = gson.fromJson(myJsonClub, Club.class);
System.out.println(myClub.equals(myNewClub) ? "Cloned!" : "Failed");
}

private String title = "MyClub";
private ArrayList members = new ArrayList();

public boolean equals(Club that) {
if (!this.title.equals(that.title)) return false;
for (int i=0; i

Теперь член абстрактного базового класса < /p>

package gson.test;
public abstract class Member {
private int type;
private String name = "";

public int getType() { return type; }
public void setType(int type) { this.type = type; }
public boolean equals(Member that) {return this.name.equals(that.name);}
}
< /code>

и два конкретных подкласса члена (золото и серебро) < /p>

package gson.test;
public class Gold extends Member {
private String goldData = "SomeGoldData";
public Gold() {
super();
this.setType(2);
}
public boolean equals(Gold that) {
return (super.equals(that) && this.goldData.equals(that.goldData));
}
}

package gson.test;
public class Silver extends Member {
private String silverData = "SomeSilverData";
public Silver() {
super();
this.setType(1);
}
public boolean equals(Silver that) {
return (super.equals(that) && this.silverData.equals(that.silverData));
}
}
< /code>

и, наконец, вывод < /p>

{"title":"MyClub","members":[{"silverData":"SomeSilverData","type":1,"name":""},{"goldData":"SomeGoldData","type":2,"name":""}]}
Exception in thread "main" java.lang.RuntimeException: Failed to invoke public gson.test.Member() with no args
at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:107)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:186)
...


Подробнее здесь: https://stackoverflow.com/questions/306 ... eseralizer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»