使用Gson反序列化有序列表

5
我正在Android中使用Gson库。我从Web服务中检索一些数据,以json格式返回。
所以当我获取到数据后,我执行以下操作:
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文件相同顺序排序的列表。


在我看来,顺序是相同的,我用它来处理高分列表,但为了100%确定,您可以在listobjects中传递一个指示器,该指示器可用于对列表进行排序。 - A.S.
1个回答

1
你可以使用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"}]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接