package org.test4j.json.encoder; import java.io.Writer; import java.util.Collection; import java.util.List; @SuppressWarnings({ "rawtypes" }) public abstract class ObjectEncoder<T> extends JSONEncoder<T> { protected ObjectEncoder(Class clazz) { super(clazz); } public boolean encode(T target, Writer writer, List<String> references) { try { return this.encodeObject(target, writer, references); } catch (Exception e) { throw this.wrapException(e); } } private final boolean encodeObject(T target, Writer writer, List<String> references) throws Exception { boolean isNullOrRef = this.writerNullOrReference(target, writer, references, true); if (isNullOrRef) { return false; } Collection<PropertyEncoder> encoders = this.getPropertyEncoders(target); writer.write("{"); boolean comma = this.writeClassFlag(target, writer); for (PropertyEncoder encoder : encoders) { if (encoder.doesSkipNull()) { continue; } if (comma) { writer.write(","); } else { comma = true; } comma = encoder.encode(target, writer, references); } writer.write("}"); return true; } /** * 返回对象需要序列化的属性列表 * * @param target * @return */ protected abstract Collection<PropertyEncoder> getPropertyEncoders(T target); }