Gson известен и используется для простоты использования. Если вам нужна скорость, вам придется взглянуть на супер популярного Джексона Джсона.
Я тестировал и сравнивал как Gson, так и Jackson, и я могу сказать вам, что в некоторых случаях Джексон в 15 раз быстрее и сериализации, и десериализации, даже на очень больших объектах.
Чтобы получить подобное поведение как Json я использую следующие настройки
public enum JsonMapper {
INSTANCE;
private final ObjectMapper mapper;
private JsonMapper() {
mapper = new ObjectMapper();
VisibilityChecker<?> visibilityChecker = mapper.getSerializationConfig().getDefaultVisibilityChecker();
mapper.setVisibilityChecker(visibilityChecker
.withFieldVisibility(Visibility.ANY)
.withCreatorVisibility(Visibility.NONE)
.withGetterVisibility(Visibility.NONE)
.withSetterVisibility(Visibility.NONE)
.withIsGetterVisibility(Visibility.NONE));
}
public ObjectMapper mapper() {
return mapper;
}
}
Это получится дать те же самые JSon строки как Gson для одних и тех же объектов. Вы можете настроить его, чтобы использовать только геттеры и сеттеры, если хотите. Я бы посоветовал вам прочитать обо всех аннотациях Jackson json для обработки подтипов (полезно для систем RPC-стиля).
Мои варианты использования: я использую jackson как сериализацию, когда мне нужно сохранять капли в системах хранения (Redis, Cassandra, Mongo, ... иногда mysql тоже). Я также использую его как сериализацию для своих API-интерфейсов RPC для довольно высоких систем трафика, хотя я предпочитаю использовать Protobuf для тех, когда это возможно. В этом последнем случае я использую Jackson для непосредственного сериализации в байт [] или поток для повышения производительности.
Последнее примечание. Объект mapper является потокобезопасным и имеет один статический экземпляр, как в примере, который я только что представил, не позволит вам получить небольшие накладные расходы.
EDIT: Я знаю, что мой пример не соответствует многим рекомендациям, указанным на странице Jackson, но он позволяет мне иметь простой для понимания код, который выглядит как Gson.toJson
и Gson.fromJson
(который я начал с тоже и включил позже Джексон)
Gson.toJson(object)
=>JsonMapper.INSTANCE.mapper().writeValueAsString(object)
Gson.fromJson(object, clazz)
=>JsonMapper.INSTANCE.mapper().readValue(jsonString, clazz);
fastJson - библиотека C# ... – melbic