package com.alibaba.json.bvt.annotation; import java.io.IOException; import java.lang.reflect.Type; import org.junit.Assert; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.ObjectSerializer; import junit.framework.TestCase; public class SerializeUsingTest extends TestCase { public void test_annotation() throws Exception { Model model = new Model(); model.value = 100; String json = JSON.toJSONString(model); Assert.assertEquals("{\"value\":\"100元\"}", json); Model model2 = JSON.parseObject(json, Model.class); Assert.assertEquals(model.value, model2.value); } public static class Model { @JSONField(serializeUsing = ModelValueSerializer.class, deserializeUsing = ModelValueDeserializer.class) public int value; } public static class ModelValueSerializer implements ObjectSerializer { public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { Integer value = (Integer) object; String text = value + "元"; serializer.write(text); } } public static class ModelValueDeserializer implements ObjectDeserializer { public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { String text = (String) parser.parse(); if (text != null) { text = text.replaceAll("元", ""); } return (T) Integer.valueOf(Integer.parseInt(text)); } @Override public int getFastMatchToken() { return 0; } } }