【发布时间】:2014-08-08 08:08:30
【问题描述】:
我想使用 Jackson 类将我的 HashMap 列表转换为对象列表(我已经阅读过可以这样做)。
我要序列化的对象如下所示...
public class FinancialTransaction {
private Date tranDate;
private String tranDescription;
private Double debit;
private Double credit;
...getters and setters...
我想做这样的事情......
ArrayList<FinancialTransaction> transactions =
new ArrayList<FinancialTransaction>();
HashMap<String, String> records = new HashMap<String, String>();
records.put("tranDate", "08/08/2014");
records.put("tranDescription", "08/08/2014");
records.put("debit", "1.50");
records.put("credit", null);true);
for (HashMap<String, String> record : records) {
ObjectMapper m = new ObjectMapper();
FinancialTransaction ft = m.convertValue(record, FinancialTransaction.class);
transactions.add(ft);
}
return transactions;
HashMap 的键值与我的 FinancialTransaction 类中的属性名称相同,但值都是字符串。
因为哈希映射的所有值都是字符串,所以在尝试从映射转换为对象时出现错误。这让我觉得我需要编写一个自定义反序列化器?有人可以帮助我了解我的自定义反序列化器类的外观。或者如果我不需要一个会更好。
谢谢
【问题讨论】:
-
如果字段类型匹配,转换在技术上是可能的,但你为什么不直接在哈希图和你的类之间编写一个简单的转换(映射器)?为什么选择杰克逊?
-
我只是觉得使用这些类会很好。
-
好的,很公平。请注意,Jackson 将映射序列化为 JSON,然后将其反序列化为您的类型,这会产生一些性能开销。