/src/test/java/com/alibaba/json/test/codec/FastjsonManualCodec.java
https://github.com/alibaba/fastjson · Java · 188 lines · 137 code · 48 blank · 3 comment · 3 complexity · 3bf5e844c9154f93e8d7d6915dd30b2f MD5 · raw file
- package com.alibaba.json.test.codec;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.lang.reflect.Type;
- import java.util.Collection;
- import java.util.List;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.parser.DefaultJSONParser;
- import com.alibaba.fastjson.parser.Feature;
- import com.alibaba.fastjson.parser.ParserConfig;
- import com.alibaba.fastjson.serializer.JSONSerializer;
- import com.alibaba.fastjson.serializer.ObjectSerializer;
- import com.alibaba.fastjson.serializer.SerializeConfig;
- import com.alibaba.fastjson.serializer.SerializeWriter;
- import com.alibaba.fastjson.serializer.SerializerFeature;
- import data.media.Image;
- import data.media.Media;
- import data.media.MediaContent;
- public class FastjsonManualCodec implements Codec {
- private ParserConfig config = new ParserConfig();
- private SerializeConfig serializeConfig = new SerializeConfig();
- public FastjsonManualCodec(){
- System.out.println("fastjson-" + JSON.VERSION);
-
- serializeConfig.put(MediaContent.class, new MediaContentSerializer());
- }
- public String getName() {
- return "fastjson-manual";
- }
- public <T> T decodeObject(String text, Class<T> clazz) {
- DefaultJSONParser parser = new DefaultJSONParser(text, config);
- parser.config(Feature.DisableCircularReferenceDetect, true);
- return parser.parseObject(clazz);
- }
- public <T> Collection<T> decodeArray(String text, Class<T> clazz) throws Exception {
- DefaultJSONParser parser = new DefaultJSONParser(text, config);
- parser.config(Feature.DisableCircularReferenceDetect, true);
- return parser.parseArray(clazz);
- }
- public final Object decodeObject(String text) {
- DefaultJSONParser parser = new DefaultJSONParser(text, config);
- parser.config(Feature.DisableCircularReferenceDetect, true);
- return parser.parse();
- }
- public final Object decode(String text) {
- DefaultJSONParser parser = new DefaultJSONParser(text, config);
- parser.config(Feature.DisableCircularReferenceDetect, true);
- return parser.parse();
- }
- // private JavaBeanSerializer serializer = new JavaBeanSerializer(Long_100_Entity.class);
- public String encode(Object object) throws Exception {
- SerializeWriter out = new SerializeWriter();
- out.config(SerializerFeature.DisableCircularReferenceDetect, true);
- JSONSerializer serializer = new JSONSerializer(out, serializeConfig);
- serializer.write(object);
- String text = out.toString();
- out.close();
- return text;
- }
- @SuppressWarnings("unchecked")
- public <T> T decodeObject(byte[] input, Class<T> clazz) throws Exception {
- return (T) JSON.parseObject(input, clazz, Feature.DisableCircularReferenceDetect);
- }
- public static class ImageSerializer implements ObjectSerializer {
- @Override
- public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
- int features) throws IOException {
- Image image = (Image) object;
-
- SerializeWriter out = serializer.out;
-
- out.writeFieldValue('{', "height", image.getHeight());
- out.writeFieldValueStringWithDoubleQuote(',', "size", image.getSize().name());
-
- String tile = image.getTitle();
- out.writeFieldValueStringWithDoubleQuoteCheck(',', "title", tile);
- out.writeFieldValueStringWithDoubleQuoteCheck(',', "uri", image.getUri());
- out.writeFieldValue(',', "width", image.getWidth());
- out.write('}');
- // TODO
- }
-
- }
- public static class MediaSerializer implements ObjectSerializer {
- @Override
- public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
- int features) throws IOException {
- Media image = (Media) object;
-
- SerializeWriter out = serializer.out;
- out.writeFieldValue('{', "bitrate", image.getBitrate());
- out.writeFieldValue(',', "duration", image.getDuration());
- out.writeFieldValue(',', "height", image.getHeight());
-
- String format = image.getFormat();
- out.writeFieldValueStringWithDoubleQuoteCheck(',', "format", format);
-
- out.writeFieldValue(',', "size", image.getSize());
- out.writeFieldValue(',', "height", image.getHeight());
-
- List<String> persons = image.getPersons();
- out.writeFieldName("persons");
- out.write(persons);
- out.writeFieldValueStringWithDoubleQuote(',', "player", image.getPlayer().name());
- out.writeFieldValue(',', "size", image.getSize());
-
- String title = image.getTitle();
- out.writeFieldValue(',', "title", title);
-
- String uri = image.getUri();
- out.writeFieldValueStringWithDoubleQuoteCheck(',', "uri", uri);
-
- out.writeFieldValue(',', "width", image.getWidth());
-
- out.write('}');
- }
-
- }
-
- public static class MediaContentSerializer implements ObjectSerializer {
- MediaSerializer mediaSer = new MediaSerializer();
- ImageSerializer imageSer = new ImageSerializer();
- @Override
- public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
- int features) throws IOException {
- MediaContent mediaContent = (MediaContent) object;
-
- SerializeWriter out = serializer.out;
-
- out.write('{');
-
- out.writeFieldName("image", false);
- List<Image> images = mediaContent.images;
-
- out.write('[');
- for (int i = 0, size = images.size(); i < size; ++i) {
- if (i != 0) {
- out.write(',');
- }
- Image image = images.get(i);
- imageSer.write(serializer, image, Integer.valueOf(i), Image.class, features);
- }
- out.write(']');
- out.write(',');
-
- out.writeFieldName("media", false);
- mediaSer.write(serializer, mediaContent.media, "media", Media.class, features);
-
- out.write('}');
- }
-
- }
- @Override
- public byte[] encodeToBytes(Object object) throws Exception {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public void encode(OutputStream out, Object object) throws Exception {
- out.write(encodeToBytes(object));
- }
- }