3

複雑な Java オブジェクトを JSON に変換しようとしています。しかし、私はそうすることができません。Javaジェネリックを使用しています。

これは、ページ出力を格納する汎用オブジェクトです。JsonTest オブジェクト構造を投稿していません。これは、プロパティとセッターとゲッターを持つ通常の Java クラスと同じです。

class ListRow<T>{

    private int total;
    private int currentRow;
    private List<T> test;


public ListRow(int total, int currentRow, List<T> test) {
    this.total = total;
    this.currentRow = currentRow;
    this.test = test;
}
public int getTotal() {
    return total;
}
public void setTotal(int total) {
    this.total = total;
}
public int getCurrentRow() {
    return currentRow;
}
public void setCurrentRow(int currentRow) {
    this.currentRow = currentRow;
}
public List<T> getTest() {
    return test;
}
public void setTest(List<T> test) {
    this.test = test;
}



    JsonTest test = new JsonTest("naveen", 20, 20000);
JsonTest test2 = new JsonTest("parveen", 20, 20000);
JsonTest test3 = new JsonTest("pawan", 20, 20000);
JsonTest test4 = new JsonTest("anil", 20, 20000);

List<JsonTest> list = new ArrayList<JsonTest>();
list.add(test);
list.add(test2);
list.add(test3);
list.add(test4);

Gson gson = new Gson();
System.out.print(gson.toJson(list));

この値でこのプログラムを実行すると、正しい出力が得られました。

 [{"name":"naveen","age":20,"salary":20000.0},{"name":"parveen","age":20,"salary":20000.0},{"name":"pawan","age":20,"salary":20000.0},{"name":"anil","age":20,"salary":20000.0}]

しかし、Java の汎用機能を実現するために次のコードを作成すると、目的の出力が得られません。

Gson gson = new Gson();
ListRow<JsonTest> dataList = new ListRow<JsonTest>(2, 2, list);
System.out.print(gson.toJson(dataList));

出力は次のとおりです。

{"total":2,"currentRow":2,"test":[{},{},{},{}]}. 

このコードの何が問題になっていますか? どうすれば目的の出力を得ることができますか? グリッド用にコードを一度記述してから、任意のオブジェクトを渡してグリッドに表示したいので、汎用機能を使用したいと考えています。

Json テスト ケース:

public static void main(String[] args) {

    JsonTest test = new JsonTest("naveen", 20, 20000);
    JsonTest test2 = new JsonTest("parveen", 20, 20000);
    JsonTest test3 = new JsonTest("pawan", 20, 20000);
    JsonTest test4 = new JsonTest("anil", 20, 20000);

    List<JsonTest> list = new ArrayList<JsonTest>();
    list.add(test);
    list.add(test2);
    list.add(test3);
    list.add(test4);

    Gson gson = new Gson();
    System.out.print(gson.toJson(list));

    ListRow<JsonTest> dataList = new ListRow<JsonTest>(2, 2, list);
    System.out.print(gson.toJson(dataList));

}
4

1 に答える 1

5

追加TypeToken:

Type type = new TypeToken<ListRow<JsonTest>>() {}.getType();
System.out.println(gson.toJson(dataList, type));

Tokenをシリアル化/deする場合に使用しますCollection

修理済み

 public static void main(String[] args) {
    Gson gson = new Gson();

    JsonTest test = new JsonTest("naveen", 20, 20000);
    JsonTest test2 = new JsonTest("parveen", 20, 20000);
    JsonTest test3 = new JsonTest("pawan", 20, 20000);
    JsonTest test4 = new JsonTest("anil", 20, 20000);

    List<JsonTest> list = new ArrayList<JsonTest>();
    list.add(test);
    list.add(test2);
    list.add(test3);
    list.add(test4);

    ListRow<JsonTest> dataList = new ListRow<JsonTest>(2, 2, list);

    Type type = new TypeToken<ListRow<JsonTest>>() {}.getType();

    System.out.println(gson.toJson(dataList, type));
}

出力:

{"total":2,"currentRow":2,"test":[{"name":"naveen","age":20,"salary":20000.0},{"name":"parveen","age":20,"salary":20000.0},{"name":"pawan","age":20,"salary":20000.0},{"name":"anil","age":20,"salary":20000.0}]}
于 2013-10-27T13:04:38.767 に答える