GsonFireBuilder builder = new GsonFireBuilder() .registerTypeSelector(Barn.class, new TypeSelector<Barn>() { @Override public Class<? extends Barn> getClassForElement(JsonElement readElement) { String type = readElement.getAsJsonObject().get("type").getAsString(); if(type.equals("horse")){ return Horse.class; } else if(type.equals("cow")) { return Cow.class; } else { return null; //returning null will trigger Gson's default behavior } } }); Gson gson = builder.createGson();
GsonFireBuilder builder = new GsonFireBuilder() .registerTypeSelector(Base.class, new TypeSelector<Base>() { @Override public Class<? extends Base> getClassForElement(JsonElement readElement) { String kind = readElement.getAsJsonObject().get("kind").getAsString(); if(kind.equals("a")){ return A.class; //This will cause Gson to deserialize the json mapping to A } else if(kind.equals("b")) { return B.class; //This will cause Gson to deserialize the json mapping to B } else { return null; //returning null will trigger Gson's default behavior } } }); Gson gson = builder.createGson();
public static List<? extends TestQuestion> load(Reader reader) { Gson gson = new GsonFireBuilder().registerTypeSelector(TestQuestion.class, new QuestionTypeSelector()).createGson(); TestSet input = gson.fromJson(reader, TestSet.class); return input.questions; }
GsonFireBuilder builder = new GsonFireBuilder() .registerTypeSelector(Base.class, new TypeSelector<Base>() { @Override public Class<? extends Base> getClassForElement(JsonElement readElement) { String typ = readElement.getAsJsonObject().get("typ").getAsString(); if("a".equals(typ)){ return A.class; } else if("b".equals(typ)) { return B.class; } else { //"base".equals(typ) return Base.class; } } }); Gson gson = builder.createGson(); A a = new A(); a.typ = "a"; B b = new B(); b.typ = "b"; Base base = new Base(); base.typ = "base"; String jsona = gson.toJson(a); String jsonb = gson.toJson(b); String jsonbase = gson.toJson(base); Base ba = gson.fromJson(jsona, Base.class); // ^ returns A Base bb = gson.fromJson(jsonb, Base.class); // ^ returns B Base bbase = gson.fromJson(jsonbase, Base.class); // ^ returns Base
/** * Get new Gson instance with registered processor that handles Usage object * @return Gson */ private Gson getNewGson() { return new GsonFireBuilder().registerPreProcessor(Usage.class, new UsageDeserializer<>()).createGson(); }
/** * Get new Gson instance with registered processor that handles CDR object * @return Gson */ private Gson getNewGson() { return new GsonFireBuilder().registerPreProcessor(CDR.class, new CDRDeserializer<>()).createGson(); }
/** * Get new Gson instance with registered processor that handles Bill object * @return Gson */ private Gson getNewGson() { return new GsonFireBuilder().registerPreProcessor(Bill.class, new BillDeserializer<>()).createGson(); }
@Inject public JsonPojoConverter(final ReportPostProcessor reportPostProcessor, final ElementPostProcessor elementPostProcessor) { GsonFireBuilder builder = new GsonFireBuilder() .registerPostProcessor(Report.class, reportPostProcessor) .registerPostProcessor(Element.class, elementPostProcessor) .enumDefaultValue(MimeType.class, MimeType.UNKNOWN); gsonParserWithProcessors = builder.createGson(); }