2013-10-27 4 views
3

Я пытаюсь преобразовать сложный объект Java в JSON. Но я не могу этого сделать. Я использую Java generics.Как преобразовать сложный объект Java в JSON

Это общий объект для хранения вывода страницы. Я не размещаю структуру объекта JsonTest. он аналогичен любому нормальному классу java с свойством и сеттером и getter.

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":[{},{},{},{}]}. 

Что не так с этим кодом? Как я могу получить желаемый результат? Я хочу работать с общей функцией, так как я хочу написать код один раз для Grid, а затем передать любой объект для отображения в сетке. случай

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)); 

} 
+0

Enter «gson» в вашем браузере строке поиска, нажмите на первых возвращается результат Google, нажмите на «Руководство пользователя», нажмите на «Сериализацию и десериализации общих типов», прочитать решение твоя проблема. –

+0

Где находится класс 'JsonTest'? пожалуйста, опубликуйте его –

+0

Я разместил JsonTest. Могу ли вы это увидеть. –

ответ

5

Добавить TypeToken:

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

Используйте Token, если вы хотите сериализовать/Д.Е. Collection

Fixed

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}]} 
+0

большое спасибо Максиму. Я получил решение. –

+2

Не забудьте принять ответ, это еще один хороший способ сказать «спасибо» :) – giampaolo

Смежные вопросы