3

我在 Android 中有一个小应用程序,它必须通过套接字与服务器通信。问题是:我可以使用 Gson 来序列化对象的引用吗?

我举个例子:如果我有这样的 B 类:

public class B{
    int n;

    public B(int n){
        this.n=n;
    }

    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    public B() {
        super();
    }
}

和这样的A类

public class A{
    B b1;
    B b2;
    B b3;

    public B getB1() {
        return b1;
    }

    public void setB1(B b1) {
        this.b1 = b1;
    }

    public B getB2() {
        return b2;
    }

    public void setB2(B b2) {
        this.b2 = b2;
    }

    public B getB3() {
        return b3;
    }

    public void setB3(B b3) {
        this.b3 = b3;
    }

    public A(B b1, B b2, B b3) {
        super();
        this.b1 = b1;
        this.b2 = b2;
        this.b3 = b3;
    }

    public A() {
        super();
    }
}

比我打电话

B b1 = new B(1); B b2 = new B(2)
A a = new A(b1,b1,b2);

如果我序列化(使用(new Gson()).toJson(a,A.class)我获得的对象

{"b1":{"n":1},"b2":{"n":1},"b3":{"n":2}}

但我希望有一些链接这个

{istance1:{b1: {"b1":istance2,"b2":istance2,"b3":istance2},istance2: {"n":1},istance3:{"n":2}}

你能帮助我吗?我读了很多页,但我没有找到任何东西!

4

2 回答 2

5

看看 GraphAdapterBuilder,它可以做到这一点。您需要将该文件复制到您的应用程序中,因为它不包含在 Gson 中。

Roshambo rock = new Roshambo("ROCK");
Roshambo scissors = new Roshambo("SCISSORS");
Roshambo paper = new Roshambo("PAPER");
rock.beats = scissors;
scissors.beats = paper;
paper.beats = rock;

GsonBuilder gsonBuilder = new GsonBuilder();
new GraphAdapterBuilder()
    .addType(Roshambo.class)
    .registerOn(gsonBuilder);
Gson gson = gsonBuilder.create();

assertEquals("{'0x1':{'name':'ROCK','beats':'0x2'}," +
    "'0x2':{'name':'SCISSORS','beats':'0x3'}," +
    "'0x3':{'name':'PAPER','beats':'0x1'}}",
    gson.toJson(rock).replace('\"', '\''));

https://code.google.com/p/google-gson/source/browse/trunk/extras/src/main/java/com/google/gson/graph/GraphAdapterBuilder.java

于 2012-10-20T13:16:14.107 回答
-1

JSON 是为数据交换而设计的标准。这样,为了“标准化”通信,它需要遵循一些规则。

如果要使用 GSon 序列化数据,则无法更改其序列化方式。那是模式

如果您真的想以自己的方式生成序列化数据,我认为您还需要为其生成序列化器/反序列化器!

祝你好运

于 2012-10-19T16:14:18.207 回答