2017-01-02 103 views
0

之间确实GSON允许一个写的这等价物:POJO无需JSON字符串映射

Gson gson = ...; //build gson with custom type adapters 
gson.fromJson(gson.toJson(pojo), Map.class); 

头也不回的一切开销为String第一?

换句话说,我需要这个杰克逊使用线相当于:

objectMapper.convertValue(pojo, Map.class) 

我知道这可以通过使用其他库或只是反射来完成,而是利用GSON之所以特别是因为转换需要遵循相同的定制逻辑,即gson对象已通过额外的类型适配器进行了配置。使用任何其他库将意味着重复这个逻辑。

+0

你需要它成为一个'Map'吗? –

+0

@SotiriosDelimanolis结果呢?是。我意识到有十亿种方法可以实现这一目标,但我特别问是否有使用Gson的简单方法。 – kaqqao

+0

贬低选民的头脑会解释他们的推理吗? – kaqqao

回答

1

我相信这是做它的方式:

JsonElement jsonElement = gson.toJsonTree(pojo); 
return gson.fromJson(jsonElement, Map.class); 

这将尊重gson配置的自定义转换逻辑,但不会字符串化的中介表示。

+0

你能解释一下使用'toJsonTree'和'toJson'的区别。我用一个示例来测试这个例子,输出结果是一样的,也许它与内部工作有关。任何关于它们如何不同的原因以及为什么选择JSONTree而不是简单的基于json的字符串? –

+0

@BandiKishore结果_应始终相同。区别仅在于所需步骤的数量。将原始值转换为JsonElement需要发生,但在这种情况下将所有内容序列化为字符串不会,并且使用'toJsonTree'是避免它的一种方法(仅使用'JsonElement')。 – kaqqao

+0

嗯,我不知道有更好的方法来做到这一点。我必须创建一个对象的深层副本,并用于Json和fromJson。 (如果我知道有更好的方法)。我将通过一次源代码。谢谢 :) –