相关疑难解决方法(0)

Gson序列化多态对象列表

我正在尝试使用Gson将涉及多态的对象序列化/反序列化为JSON.

这是我的序列化代码:

ObixBaseObj lobbyObj = new ObixBaseObj();
lobbyObj.setIs("obix:Lobby");

ObixOp batchOp = new ObixOp();
batchOp.setName("batch");
batchOp.setIn("obix:BatchIn");
batchOp.setOut("obix:BatchOut");

lobbyObj.addChild(batchOp);

Gson gson = new Gson();
System.out.println(gson.toJson(lobbyObj));
Run Code Online (Sandbox Code Playgroud)

这是结果:

 {"obix":"obj","is":"obix:Lobby","children":[{"obix":"op","name":"batch"}]}
Run Code Online (Sandbox Code Playgroud)

序列化大多的作品,除了它缺少继承成员的内容(尤其是obix:BatchInobixBatchout字符串丢失).这是我的基类:

public class ObixBaseObj  {
    protected String obix;
    private String display;
    private String displayName;
    private ArrayList<ObixBaseObj> children;

    public ObixBaseObj()
    {
        obix = "obj";
    }

    public void setName(String name) {
        this.name = name;
    }
        ...
}
Run Code Online (Sandbox Code Playgroud)

这是我继承的类(ObixOp)的样子:

public class ObixOp extends ObixBaseObj {
    private String in;
    private String out;

    public ObixOp() { …
Run Code Online (Sandbox Code Playgroud)

java serialization json gson

42
推荐指数
3
解决办法
3万
查看次数

如何处理多态的反序列化?

我有一个类:

public class Barn {
    String type;
    Animal animal;
}

public class Horse extends Animal {
}

public class Cow extends Animal {
}
Run Code Online (Sandbox Code Playgroud)

我想序列化它们的列表:

List<Barn> barns = new ArrayList<Barn>();

Barn barn1 = new Barn();
barn1.setType("horse");
barn1.setAnimal(new Horse());
barns.add(barn1);

Barn barn2 = new Barn();
barn2.setType("cow");
barn2.setAnimal(new Cow());
barns.add(barn2);

...

Group<Barn> barns = gson.fromJson(serialized);   
Run Code Online (Sandbox Code Playgroud)

当我序列化时,Animal属性的类型信息将丢失.有没有办法我可以以某种方式安装解析器监听器,以便我可以提供正确的类来反序列化,因为遇到列表中的每个元素?这就是手动提供描述类类型的字符串的想法.

谢谢

java gson

27
推荐指数
3
解决办法
1万
查看次数

Gson和抽象超类:反序列化问题

假设有一个抽象类,比方说A,和两个非抽象的子类,比如说A1A2.我想通过使用GSON库从json格式"反序列化"它们.

我得到一个A对象数组.

int n = ...;
A[] list = new A[n];
A[0] = new A1(....);
A[1] = new A2(....);
...
Run Code Online (Sandbox Code Playgroud)

有人转换为JSON字符串,如下所示:

String json = (new Gson()).toJson(list);
Run Code Online (Sandbox Code Playgroud)

最后,如果我尝试反序列化如下

A[] deserializedList =  (new Gson()).fromJson(json, A[].class);
Run Code Online (Sandbox Code Playgroud)

然后我有一个错误,因为GSON默认的反序列化器找到一个抽象类(即A),它不能猜测子类类型.

我怎么解决这个问题?

PS:我读过有关自定义反序列化器的内容,但在这种情况下我不明白如何使用它们.

java gson

10
推荐指数
1
解决办法
6366
查看次数

在GSON中反序列化接口

想不出更好的措辞这个问题,但基本上我想在GSON中存储具体类的名称(参见"运动"):

{ 
    "player" : {
        "position" : { "x" : 300, "y" : 400 },
        "scale" : 1,
        "rotation" : 0,
        "sprite" : {
            "frames" : [ { 
                "fileName" : "data/plane.png"
            } ],
            "duration" : 1
        }
    },
    "movementDelay" : { "elapsed" : 0, "started" : 0, "delay" : 150 },
    "movement" : { "class" : "controller.TopDownGridMovement" }
}
Run Code Online (Sandbox Code Playgroud)

这是包含我要反序列化的Movement接口的类:

public class PlayerController {
    private Player player;
    private DelayTimer movementDelay;
    private Movement movement;

    public PlayerController() {
    }

    [...]
}
Run Code Online (Sandbox Code Playgroud)

我写了一个Custom …

java json interface class gson

6
推荐指数
1
解决办法
8683
查看次数

使用gson解析json到java对象的问题

我想使用google-gson将json数据解析为java对象.

以下是我要解析的数据示例:

  {"isBean":{"userName":"test","password":"password112"}}
Run Code Online (Sandbox Code Playgroud)

IsBean.java

public interface IsBean extends Serializable,IsSerializable{

    long getId();

}
Run Code Online (Sandbox Code Playgroud)

User.java

public class User implements IsBean,IsSerializable,Serializable {

    String userName;
    String password;

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public long getId() {
        return 0;
    }


}
Run Code Online (Sandbox Code Playgroud)

RequestObj.java

public class RequestObj implements IsBean, Serializable,IsSerializable{

    IsBean  isBean;
    @Override
    public long getId() { …
Run Code Online (Sandbox Code Playgroud)

java gwt gson

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

gson ×5

java ×5

json ×2

class ×1

gwt ×1

interface ×1

serialization ×1