@Override public Fields serialize(final Object o) { if (!set.contains(o.getClass())) throw new IllegalArgumentException(); final Fields f = new Fields(); if (o instanceof Collection) { final Collection<?> c = ((Collection<?>) o); f.putObject("values", c.toArray()); } else if (o instanceof Map) { final Map<?, ?> m = ((Map<?, ?>) o); f.putObject("keys", m.keySet().toArray()); f.putObject("values", m.values().toArray()); } assert f.size() > 0 : o; return f; }