/** {@inheritDoc} */ @Override public void serialize(BinaryObjectImpl bin, JsonGenerator gen, SerializerProvider ser) throws IOException { try { BinaryType meta = bin.rawType(); // Serialize to JSON if we have metadata. if (meta != null && !F.isEmpty(meta.fieldNames())) { gen.writeStartObject(); for (String name : meta.fieldNames()) { Object val = bin.field(name); if (val instanceof BinaryObjectImpl) { BinaryObjectImpl ref = (BinaryObjectImpl)val; if (ref.hasCircularReferences()) throw ser.mappingException("Failed convert to JSON object for circular references"); } gen.writeObjectField(name, val); } gen.writeEndObject(); } else { // Otherwise serialize as Java object. Object obj = bin.deserialize(); gen.writeObject(obj); } } catch (BinaryObjectException ignore) { gen.writeNull(); } } };
/** * @throws Exception If failed. */ @Test public void testSingleHandle() throws Exception { SingleHandleA a = new SingleHandleA(new SingleHandleB()); BinaryObjectImpl bo = marshal(a, binaryMarshaller()); Map<String, BinaryObject> map = bo.field("map"); BinaryObject innerBo = map.get("key"); assertEquals(SingleHandleB.class, innerBo.deserialize().getClass()); }
BinaryObjectImpl portObj = marshal(obj1, marsh); assertArrayEquals(obj1.valArr, portObj.<BigDecimal[]>field("valArr")); assertArrayEquals(obj1.valArr, portObj.<DecimalReflective>deserialize().valArr); assertArrayEquals(obj1.valArr, (BigDecimal[])portObj.type().field("valArr").value(portObj)); assertEquals(obj1.val, portObj.field("val")); assertEquals(obj1.val, portObj.<DecimalReflective>deserialize().val); assertEquals(obj1.val, portObj.type().field("val").value(portObj)); assertEquals(obj2.val, portObj.field("val")); assertArrayEquals(obj2.valArr, portObj.<BigDecimal[]>field("valArr")); assertEquals(obj2.val, portObj.field("val")); assertEquals(obj2.val, portObj.<DecimalMarshalAware>deserialize().val); assertEquals(obj2.val, portObj.type().field("val").value(portObj));
BinaryObjectImpl innerObj = obj.field("inner");