Java Gson JSON:序列化包含 List<Map.Entry<...,...>> 的对象

问题描述

我目前正在尝试使用谷歌 Gson 序列化并正确反序列化一个包含元组列表的对象。我在 herehere 处发现了类似的问题,但我无法针对我的问题调整他们的解决方案,因为我的 List 在一个对象中。

这里有一个简单的例子:

import com.google.gson.*;
import java.util.*;


public class SerializeTheCity  {

    public static void main(String[] args) {

        HashMap <String,Integer> cityMap = new HashMap <>();
        cityMap.put("Street A",4);
        cityMap.put("Street B",3);
        cityMap.put("Street C",7);
        cityMap.put("Street D",8);
        cityMap.put("Street E",9);

        City someCity = new City();

        someCity.streets= new ArrayList<>();
        someCity.streets.addAll(cityMap.entrySet());
        System.out.println(someCity.streets.get(1).getValue()); //works fine,how do I serialize it?

        Gson gson = new Gson();


        String saveCity = gson.toJson(someCity);
        System.out.println(saveCity); //does not work (empty List)


        // here I tried to use a solution [link 1] that worked for a similar question.
        Gson gson2 = new Gson();
        JsonElement jsonTree = gson2.toJsonTree(cityMap,Map.class);
        JsonObject jsonObject = new JsonObject();
        jsonObject.add("city",jsonTree);
        System.out.println("city = "+jsonObject); //how do I deserialize this into an object of city?


       City thisCity = gson.fromJson(jsonObject,City.class);
       System.out.println("streets = "+thisCity.streets); // doesnt work

       //works like in [link 1]. But its not a city-object.
       HashMap <String,Integer> thisStreets = gson.fromJson(jsonObject.get("city"),HashMap.class); 
       System.out.println("this streets = "+thisStreets);
       System.out.println("is this street A?"+thisStreets.get("Street A"));
         // this works,but I would like having the streets
        //in a city object (I could build a new city object like "newCity.streets=thisStreets",//but perhaps you know a smarter solution)
    }
}
class City { 
    List<Map.Entry<String,Integer>> streets; //Street,HouseNumber
}

感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)