package nl.pvanassen.highchart.api.base; import nl.pvanassen.highchart.api.shared.Style; import nl.pvanassen.highchart.api.format.DateTimeLabelFormats; import nl.pvanassen.highchart.api.serializer.DateTimeLabelFormatsSerializer; import nl.pvanassen.highchart.api.serializer.StyleSerializer; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.GsonBuilder; import nl.pvanassen.highchart.api.NullableDouble; import nl.pvanassen.highchart.api.serializer.NullableDoubleSerializer; public final class GsonHelper { private static final String DATE_FORMAT = "yyyyMMdd"; private static final String USER_OBJECT = "userObject"; private static final GsonHelper INSTANCE = new GsonHelper(); public static String toJson(Object object) { return GsonHelper.INSTANCE.gsonBuilder.create().toJson(object); } private final GsonBuilder gsonBuilder; private GsonHelper() { gsonBuilder = new GsonBuilder() .registerTypeAdapter( DateTimeLabelFormats.class, new DateTimeLabelFormatsSerializer()) // .registerTypeAdapter( Style.class, new StyleSerializer())// .registerTypeAdapter( NullableDouble.class, new NullableDoubleSerializer()) .serializeSpecialFloatingPointValues() .setDateFormat(GsonHelper.DATE_FORMAT)// .setExclusionStrategies(new ExclusionStrategy() { @Override public boolean shouldSkipClass(Class<?> arg0) { return false; } @Override public boolean shouldSkipField(FieldAttributes attributes) { return attributes.getName().equals(GsonHelper.USER_OBJECT); } }); } }