Java HashMap的序列化和反序列化<;MyObject,List<;整数>;和杰克逊

Java HashMap的序列化和反序列化<;MyObject,List<;整数>;和杰克逊,java,android,json,jackson,Java,Android,Json,Jackson,我目前正在开发一款小型android应用程序,它需要能够使用Jackson库通过序列化/反序列化来保存/恢复一系列设置。 在大多数情况下,它工作得非常好,我可以序列化我的对象并再次恢复它们。 现在,我需要使用以下类型序列化/反序列化私有成员: HashMap<Model, List<Integer>> 我尝试在getter/setter方法上设置@JsonAnyGetter和@JsonAnySetter等注释,并在getter、setter和变量上设置@JsonProp

我目前正在开发一款小型android应用程序,它需要能够使用Jackson库通过序列化/反序列化来保存/恢复一系列设置。 在大多数情况下,它工作得非常好,我可以序列化我的对象并再次恢复它们。 现在,我需要使用以下类型序列化/反序列化私有成员:

HashMap<Model, List<Integer>>
我尝试在getter/setter方法上设置@JsonAnyGetter和@JsonAnySetter等注释,并在getter、setter和变量上设置@JsonProperty(“subscribe”)


有没有办法绕过这个问题?最好不用编写定制的序列化/反序列化方法,因为我会得到很多这样的方法

您的问题是Jackson有一个将地图转换为JSON的标准。映射的键用作结果JSON中的属性名称

Map<String, Double> groceryPrices = new HashMap<>();
groceryPrices.put("apple", 0.25);
groceryPrices.put("orange", 0.30);
问题是您正在使用复杂对象来表示密钥。没有简单的方法可以将复杂对象序列化到字符串或从字符串反序列化

如果您不想编写自定义序列化,我建议您更改数据结构。您当前的结构将模型与其整数绑定在一起。可以将整数列表折叠到模型对象本身中:

Map<String, Model> models; // This could map modelId -> Model which now contains the integers
映射模型;//这可以映射现在包含整数的modelId->Model

我很困惑。对于这样一个字段,生成的JSON是什么?可能类似于[[“var1”:“,“var2”:123,“var3”:“xxx”],[1,4,5,7,5,4,3,3]]首先,我不明白从地图开始时这些东西从何而来。第二,这不是有效的JSON.right,所以它是为了让你知道我猜它会是什么样子。对我来说,数据的外观不那么重要,因为它除了用于序列化和反序列化之外,不打算用于任何其他用途。Jackson的目标不是“把任何东西塞进其中,然后它会找到一种方法将其转换为JSON格式”。这是为了将其转换为有意义的JSON格式。谢谢。有道理。我决定使用一个选项,将模型放在一个单独的列表中,然后在每个模型中使用modelId作为HashMap中的键。需要一点重构,我认为从长远来看,这会更好
{
  "apple": 0.25,
  "orange": 0.30
}
Map<String, Model> models; // This could map modelId -> Model which now contains the integers