package org.json.simple.serialization; import org.json.simple.parser.BufferedJSONStreamReader; import org.json.simple.parser.ParseException; import java.io.IOException; import java.io.PrintWriter; /** * @author karl.wettin@kodapan.se * @since 2011-02-04 01.12 */ public class EnumCodec extends Codec<Enum> { private Class<Enum> enumClass; public EnumCodec(Class<Enum> enumClass) { this.enumClass = enumClass; } @Override public void marshal(Enum object, Class definedType, PrintWriter json, String path, int indentation) throws IllegalAccessException, InstantiationException { json.print("\""); json.print(object.name()); json.print("\""); } @Override public Enum unmarshal(BufferedJSONStreamReader jsr) throws ParseException, IOException, InstantiationException, IllegalAccessException { jsr.next(); String name = jsr.getStringValue(); Enum[] constants = enumClass.getEnumConstants(); for (Enum constant : constants) { if (name.equals(constant.name())) { return constant; } } throw new InstantiationException("Enum constant named '" + name + "' is not supported."); } }