GSON:使用java.util.TreeSet序列化对象
如何正确序列化树集?为了让你知道什么是不起作用的,我设置了这个小演示项目。主要目标是打印我的QData对象的JSON字符串 App.javaGSON:使用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; 公共类应用程序 { 公共静态
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();