@Test void testJsonValueContextList() { JsonParsers.forEachParser(jsonParser -> { List<String> list = new ArrayList<>(); list.add("one"); list.add("two"); list.add("three"); JsonSerializer jsonSerializer = new JsonSerializer() .withSerializer(String.class, new MyTypeJsonSerializer2()); String json = jsonSerializer.serialize(list); list = jsonParser.parse(json); assertEquals(3, list.size()); assertEquals("TWO", list.get(1)); assertEquals("[\"one\",\"TWO\",\"three\"]", json); }); }
@Test void testJsonValueContextArray2() { JsonParsers.forEachParser(jsonParser -> { Object[] array = new Object[]{new Surfer(), "two", "three"}; JsonSerializer jsonSerializer = new JsonSerializer() .withSerializer(String.class, new MyTypeJsonSerializer2()); String json = jsonSerializer.serialize(array); List<String> list = jsonParser.parse(json); assertEquals(3, list.size()); assertEquals("TWO", list.get(1)); }); }
@Test void testJsonValueContextArray() { JsonParsers.forEachParser(jsonParser -> { String[] array = new String[]{"one", "two", "three"}; JsonSerializer jsonSerializer = new JsonSerializer() .withSerializer(String.class, new MyTypeJsonSerializer2()); String json = jsonSerializer.serialize(array); List<String> list = jsonParser.parse(json); assertEquals(3, list.size()); assertEquals("TWO", list.get(1)); assertEquals("[\"one\",\"TWO\",\"three\"]", json); }); }
@Test void testDateTransforming() { JsonParsers.forEachParser(jsonParser -> { final SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd"); Person foo = new Person("Foo", "Bar", new Date(), null, null); try { foo.setBirthdate(df.parse("2009/01/02")); } catch (ParseException pe) { fail(pe); } String json = new JsonSerializer().withSerializer("birthdate", new DateJsonSerializer() { @Override public boolean serialize(JsonContext jsonContext, Date date) { jsonContext.writeString(df.format(date)); return true; } }).serialize(foo); Person newUser = jsonParser .withValueConverter("birthdate", (ValueConverter<String, Date>) data -> { try { return df.parse(data); } catch (ParseException pe) { throw new JsonException(pe); } }) .parse(json, Person.class); assertEquals(foo.getBirthdate(), newUser.getBirthdate()); assertEquals("2009/01/02", df.format(newUser.getBirthdate())); }); }
@Test void testJsonValueContextBean() { JsonParsers.forEachParser(jsonParser -> { Surfer surfer = new Surfer(); surfer.setName("Igor"); surfer.setSplit("long wave"); JsonSerializer jsonSerializer = new JsonSerializer() .withSerializer(String.class, new MyTypeJsonSerializer()); String json = jsonSerializer.serialize(surfer); Map<String, Object> map = jsonParser.parse(json); assertEquals("IGOR", map.get("name")); assertEquals("{\"id\":0,\"name\":\"IGOR\",\"pipe\":null,\"skill\":null,\"split\":\"long wave\"}", json); }); }
@Test void testSerializeWithCustomBeanSerializer() { JsonSerializer jsonSerializer = new JsonSerializer(); Lucy lucy = new Lucy(); String json = jsonSerializer.serialize(lucy); assertAttribute("address", json); assertAttribute("name", json); jsonSerializer.withSerializer(Object.class, new ObjectJsonSerializer() { @Override public void serializeValue(final JsonContext jsonContext, Object value) { jsonContext.writeOpenObject(); BeanSerializer beanVisitor = new BeanSerializer(jsonContext, value) { @Override protected void onSerializableProperty(String propertyName, Class propertyType, Object value) { if (value == null) { return; } super.onSerializableProperty(propertyName, propertyType, value); } }; beanVisitor.serialize(); jsonContext.writeCloseObject(); } }); json = jsonSerializer.serialize(lucy); assertEquals("{\"name\":\"Lucy\"}", json); }
@Test void testNoClassHintsForCollections() { JsonParser.Defaults.classMetadataName = "class"; JsonSerializer.Defaults.classMetadataName = "class"; JsonParsers.forEachParser(jsonParser -> { Hero superman = creator.createSuperman(); String json = new JsonSerializer() .include("powers") // redudant .include("powers.class") .withSerializer("powers.class", new SimpleClassnameTransformer()) .exclude("*.class") .serialize(superman); int count = StringUtil.count(json, "***"); assertEquals(4, count); json = StringUtil.remove(json, "***"); Hero jsonSuperMan = jsonParser .map("lair", SecretLair.class) .map("secretIdentity", SecretIdentity.class) .parse(json, Hero.class); assertEquals("Fortress of Solitude", jsonSuperMan.getLair().getName()); assertHeroHasSuperPowers(jsonSuperMan); }); }