2017-01-02 2 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

Вам это нужно, чтобы быть «Картой»? –

+0

@SotiriosDelimanolis Результат? Да. Я понимаю, что есть миллиард способов достичь этого, но я спрашиваю конкретно, есть ли у него простой подход с использованием Gson. – kaqqao

+0

Неужели уклонившийся от голода разум объяснит их рассуждения? – kaqqao

ответ

1

Я считаю, что это способ сделать это:

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

Это будет уважать пользовательскую логику преобразования, выполненную в gson, но не stringify посредническое представление.

+0

Не могли бы вы объяснить разницу с использованием 'toJsonTree' и' toJson'. Я проверил это с примером, и результат был таким же, возможно, он имеет какое-то отношение к внутренней работе. Любая причина в том, как они отличаются и почему вы выбираете toJsonTree над простой строкой, основанной на Json? –

+0

@BandiKishore Результаты _should_ всегда будут одинаковыми. Разница заключается только в количестве необходимых шагов. В любом случае преобразование исходного значения в 'JsonElement' должно происходить, но сериализация всего в строку в этом случае не происходит, а использование' toJsonTree' - это способ избежать этого (только работая с 'JsonElement'). – kaqqao

+0

Хмм, я не знал, что есть лучший способ сделать это. Мне пришлось создать глубокую копию объекта один раз и использовать для Json и fromJson. (Если бы я знал, что есть лучший способ). Я рассмотрю исходный код один раз. Благодаря :) –

Смежные вопросы