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 に答える