由于外部原因,Map
我系统中的所有 java 只能作为键值对列表Map<String, Book>
从客户端接收,例如 a实际上将作为 Json-serialized 接收List<MapEntry<String, Book>>
。这意味着我需要自定义我的 Json 反序列化过程以期望这种地图表示。
问题是JsonDeserializer
让我实施
deserialize(JsonParser p, DeserializationContext ctxt)
无法访问它应该反序列化的检测到的泛型类型的方法(Map<String, Book>
在上面的示例中)。如果没有这些信息,我就无法在List<MapEntry<String, Book>>
不失去类型安全性的情况下反序列化。
我在看转换器,但它提供的上下文更少。
例如
public Map<K,V> convert(List<MapToListTypeAdapter.MapEntry<K,V>> list) {
Map<K,V> x = new HashMap<>();
list.forEach(entry -> x.put(entry.getKey(), entry.getValue()));
return x;
}
但这可能会创建危险的地图,ClassCastException
在检索时会抛出异常,因为无法检查类型实际上是否合理。有没有办法解决这个问题?
作为我所期望的一个例子,GsonJsonDeserializer
看起来像这样:
T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
即它以一种理智的方式提供对预期类型的访问。