Не может десериализировать тип подкласса из файла jsonJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Не может десериализировать тип подкласса из файла json

Сообщение Anonymous »

Я пытаюсь десериализировать данные в файле Animals.json , но тип подкласса продолжает отображать NULL. См. Ниже для получения подробной информации (все файлы находятся в папке SRC, за исключением GSON-2.11.0.jar в папке LIB). < /P>


[*] Скачать GSON: https://search.maven.org/artifact/com.g ... 2.11.0/jar
[*]runtimeTypeAdapterFactory.java: https://github.com/google/gson/blob/mai ... ctory.java
< /ul>
У меня есть два класса Dog.java и Cat.Java, который расширяет Animal.java. Экземпляры собаки и кошки создаются с использованием AnimalFactory.getAnimal (). < /P>
// Animal.java

public class Animal {
private String animalType;
private String animalName;
private int animalAge;

public Animal(String animalType, String animalName, int animalAge) {
this.animalType = animalType;
this.animalName = animalName;
this.animalAge = animalAge;
}

public String getAnimalType() {
return animalType;
}

public String getAnimalName() {
return animalName;
}

public int getAnimalAge() {
return animalAge;
}
}
< /code>
// Dog.java

public class Dog extends Animal {
private String barkSound;

public Dog(String animalType, String animalName, int animalAge, String barkSound) {
super(animalType, animalName, animalAge);
this.barkSound = barkSound;
}

public void setBark(String barkSound) {
this.barkSound = barkSound;
}

public String getBark() {
return barkSound;
}

@Override
public String toString() {
return "{Animal Type: " + getAnimalType() +
", Animal Name: " + getAnimalName() +
", Animal Age: " + getAnimalAge() +
", Bark Sound: " + getBark() + "}";
}
}
< /code>
// Cat.java

public class Cat extends Animal {
private String meowSound;

public Cat(String animalType, String animalName, int animalAge, String meowSound) {
super(animalType, animalName, animalAge);
this.meowSound = meowSound;
}

public void setMeow(String meowSound) {
this.meowSound = meowSound;
}

public String getMeow() {
return meowSound;
}

@Override
public String toString() {
return "{Animal Type: " + getAnimalType() +
", Animal Name: " + getAnimalName() +
", Animal Age: " + getAnimalAge() +
", Meow Sound: " + getMeow() + "}";
}
}
< /code>
// AnimalFactory.java

public class AnimalFactory {
public static Animal getAnimal(String animalType, String animalName, int animalAge) {
switch (animalType) {
case "dog":
return new Dog(animalType, animalName, animalAge, null);
case "cat":
return new Cat(animalType, animalName, animalAge, null);
default:
return null;
}
}
}
< /code>
// App.java

import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;

public class App {
public static void main(String[] args) throws Exception {

List myPets = new ArrayList();

FileReader reader = new FileReader("animals.json");
Type type = new TypeToken(){}.getType();
RuntimeTypeAdapterFactory animalAdapter = RuntimeTypeAdapterFactory
.of(Animal.class, "animalType")
.registerSubtype(Dog.class, "dog")
.registerSubtype(Cat.class, "cat");
Gson gson = new GsonBuilder().registerTypeAdapterFactory(animalAdapter).setPrettyPrinting().create();
myPets = gson.fromJson(reader, type);
reader.close();

for (Animal animal : myPets) {
System.out.println(animal);
}

}
}
< /code>
animals.json после использования файла
[
{
"barkSound": "roof",
"animalType": "dog",
"animalName": "Bob",
"animalAge": 10
},
{
"meowSound": "meow",
"animalType": "cat",
"animalName": "Tom",
"animalAge": 20
}
]
< /code>
My output:
{Animal Type: null, Animal Name: Bob, Animal Age: 10, Bark Sound: roof}
{Animal Type: null, Animal Name: Tom, Animal Age: 20, Meow Sound: meow}


Подробнее здесь: https://stackoverflow.com/questions/794 ... -json-file
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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