2014-04-02 79 views
3

我在Android中使用Gson庫。我以json格式從Web服務中檢索一些數據。反序列化Gson中的有序列表

所以我得到我做了以下數據:

Gson gson = new GsonBuilder().create(); 
ClassA obj = gson.fromJson(returnFromServer.toString(), ClassA.class); 

其中類ClassA的是:

public class ClassA{ 
    private String id; 
    private List<ClassB> myList; 
} 

所以我有內部的obj自定義對象的名單。

問題是:我可以確定列表的順序與json文件中元素的順序相同嗎?如果沒有,Gson中有沒有任何機制允許保持json文件的相同順序?

注意:以前所有的努力產生JSON文件的相同順序排序的列表。

+0

imho命令是相同的,我用它作爲highsore列表,但要100%確定你可以在列表對象中傳遞一個指示符,它可以用來對你的列表進行排序 –

回答

0

您可以使用LinkedList實現來維護排序順序,但是我創建了一個簡單的程序,即使在ArrayList中也保持順序。您可以檢查下面的代碼,

我創建ClassB.java

package com.zack.demo; 

public class ClassB { 

    private String name; 

    private int age; 

    private String gender; 


    public ClassB(String name, int age, String gender) 
    { 
     this.name = name; 
     this.age = age; 
     this.gender = gender; 

    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public String getGender() { 
     return gender; 
    } 

    public void setGender(String gender) { 
     this.gender = gender; 
    } 

} 

ClassA.java

package com.zack.demo; 

import java.util.List; 

public class ClassA { 

    private String id; 
    private List<ClassB> myList; 

    public ClassA(String id, List<ClassB> myList) 
    { 
     this.id = id; 
     this.myList = myList; 
    } 

    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public List<ClassB> getMyList() { 
     return myList; 
    } 
    public void setMyList(List<ClassB> myList) { 
     this.myList = myList; 
    } 



} 

樣品測試程序列表順序

package com.zack.demo; 

import java.util.ArrayList; 
import java.util.LinkedList; 
import java.util.List; 

import com.google.gson.Gson; 

public class GsonTest { 

    public static void main(String[] args) { 

     Gson gson = new Gson(); 


     ClassB o2 = new ClassB("Test2", 20, "Male"); 
     ClassB o1 = new ClassB("Test1", 10, "Male"); 


     List<ClassB> ls = new LinkedList<ClassB>(); 

     ls.add(o2); 
     ls.add(o1); 

     ClassA a1 = new ClassA("T1", ls); 

     String result = gson.toJson(a1, a1.getClass()); 

     System.out.println(result); 

     ClassA obj = gson.fromJson(result.toString(), ClassA.class); 

     System.out.println(gson.toJson(obj, obj.getClass())); 




    } 

} 

結果

{"id":"T1","myList":[{"name":"Test2","age":20,"gender":"Male"},{"name":"Test1","age":10,"gender":"Male"}]} 
{"id":"T1","myList":[{"name":"Test2","age":20,"gender":"Male"},{"name":"Test1","age":10,"gender":"Male"}]}