我有一个Map,其中a键的值是一个对象列表。我能够通过builder.enableComplexMapKeySerialization();
序列化键,但值没有按预期序列化,因为它们在序列化时返回字符串而不是对象。
下面是序列化的输出
[{“id”:31001,“name”:Teacher”]},//这是密钥
[{“id”:33033,“name”:“student 1”},{“id”:34001,“name”:“student 2”}]],//这是值列表
我使用了相关的TypeToken,它是TypeToken<HashMap<Teacher, List<Student>>>
,但列表值仍然返回一个字符串,而不是对象。
1条答案
按热度按时间0lvr5msh1#
JSON由名称/值对组成(其中值端可以是一个列表)。名称部分是字符串(参见:http://json.org)
你要做的是使用一个对象作为名称;你不能直接这样做。JSON对象不能是名称/值对的名称。
如果你阅读了enableComplexMapKeySerialization的文档,它解释了最终的JSON是什么。
它生成的JSON(一个Map作为JSON数组)将完美地Map回你的map。下面是一个完整的工作示例(Java 7)。
请注意,一旦我从JSON转换回Java,我将迭代Map以获取键。这是因为如果
Teacher
中没有覆盖equals()
和hashCode()
,则无法创建Teacher
的新示例并使其作为键工作(仅比较引用值)。字符串
输出量:
型
如果你在
Teacher
类中实现了equals()
和hashCode()
,那么你就可以使用Teacher
的一个新示例来从map中检索东西:型
一旦你有了它,你可以做:
型