Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GSON:使用java.util.TreeSet序列化对象_Java_Json_Gson_Treeset_Sortedset - Fatal编程技术网

GSON:使用java.util.TreeSet序列化对象

GSON:使用java.util.TreeSet序列化对象,java,json,gson,treeset,sortedset,Java,Json,Gson,Treeset,Sortedset,如何正确序列化树集?为了让你知道什么是不起作用的,我设置了这个小演示项目。主要目标是打印我的QData对象的JSON字符串 App.java package de.company.gsonserializer; 导入java.util.ArrayList; 导入java.util.Comparator; 导入java.util.HashMap; 导入java.util.Map; 导入java.util.SortedSet; 导入java.util.TreeSet; 公共类应用程序 { 公共静态

如何正确序列化树集?为了让你知道什么是不起作用的,我设置了这个小演示项目。主要目标是打印我的QData对象的JSON字符串

App.java

package de.company.gsonserializer;
导入java.util.ArrayList;
导入java.util.Comparator;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.SortedSet;
导入java.util.TreeSet;
公共类应用程序
{
公共静态void main(字符串[]args)
{
QData QData=新的QData();
ArrayList ArrayList=新的ArrayList(1);
LData l=新的LData();
Map unsortedBuabList=newhashmap();
对于(int i=0;i<5;i++){
未排序的UABLIST.put(“键-”+i,“值”+i);
}
SortedSet sortedBuabList=新树集(
新比较器(){
公共整数比较(Map.Entry e1,Map.Entry e2){
返回e1.getValue().compareTo(e2.getValue());
}
});
sortedBuabList.addAll(unsortedBuabList.entrySet());
l、 收件清单(分类清单);
arrayList.add(l);
qdata.setLocations(arrayList);
System.out.println(qdata.toString());
}
}
QData.java

package de.it2media.gsonserializer;
导入java.util.ArrayList;
导入com.google.gson.gson;
公共类QData{
私有ArrayList位置=新ArrayList(0);
公共阵列列表getLocations(){
返回地点;
}
公共void集合位置(ArrayList位置){
这个位置=位置;
}
@凌驾
公共字符串toString(){
Gson Gson=新的Gson();
字符串thisObj=gson.toJson(this);
返回此OBJ;
}
}
LData.java

package de.it2media.gsonserializer;
导入java.util.Map;
导入java.util.SortedSet;
导入java.util.TreeSet;
导入java.util.Map.Entry;
公共类LData{
private SortedSet buabList=新树集();
公共分类数据集getBuabList(){
返回布阿布利斯特;
}
公共无效设置列表(分类设置列表){
this.buabList=buabList;
}
}
输出:
{“locations”:[{“buabList”:[{},{},{},{},{},{}]}]}

预期的输出类似于:
{“locations”:[{“buabList”:[{“key”:“key-0”,“value”:“Value0”},{“key”:“key-1”,“value”:“Value1”},{“key”:“key-2”,“value”:“Value2”},{“key”:“key-3”,“value”:“key-4”,“value”:“Value4”}

你知道为什么GSON没有像我期望的那样工作吗


谢谢你的帮助,非常感谢

您遇到的问题与
树集
无关,而是因为GSON不知道如何按您希望的方式序列化映射
条目
。因此,您需要为其编写一个自定义序列化程序,如下所示:

public static class EntrySerializer implements JsonSerializer<Entry<String, String>> {
    @Override
    public JsonElement serialize(Entry<String, String> entry, Type typeOfSrc, JsonSerializationContext context) {
        JsonElement serializedKey = context.serialize(entry.getKey());
        JsonElement serializedValue = context.serialize(entry.getValue());

        JsonObject jsonObject = new JsonObject();
        jsonObject.add("key", serializedKey);
        jsonObject.add("value", serializedValue);
        return jsonObject;
    }
}
您可以在中阅读有关自定义序列化程序和反序列化程序的更多信息

Gson gson = new GsonBuilder()
        .registerTypeAdapter(Entry.class, new EntrySerializer())
        .create();