我在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();
}
}
Run Code Online (Sandbox Code Playgroud)
和这样的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();
}
}
Run Code Online (Sandbox Code Playgroud)
而不是我打电话
B b1 = new B(1); B b2 = new B(2)
A a = new A(b1,b1,b2);
Run Code Online (Sandbox Code Playgroud)
如果我序列化(使用(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}}
你能帮助我吗?我看了很多页但我没找到任何东西!
看看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('\"', '\''));
Run Code Online (Sandbox Code Playgroud)