GSON和引用(gson and references)

2019-09-24 08:20发布

我在Android上的小应用程序,它具有通过套接字服务器来comunicate。 现在的问题是:我可以用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}}

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

Answer 1:

看看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



Answer 2:

JSON是用于数据交换的标准。 通过这种方式,它是需要遵循以“标准化”通信的一些规则。

如果你想使用GSON序列化数据,你不能改变它是如何序列化。 这是模式

如果你真的想在你的方式来产生序列化的数据,我想你也将需要产生串行器/解串器吧!

祝好运



文章来源: gson and references