/* * Copyright 1999-2017 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.fastjson.serializer; import java.io.IOException; import java.lang.reflect.Type; /** * Interface representing a custom serializer for fastjson. You should write a custom serializer, if * you are not happy with the default serialization done by fastjson. You will also need to register * this serializer through {@link com.alibaba.fastjson.serializer.SerializeConfig#put(Type, ObjectSerializer)}. * * <pre> * public static class Result { * public ResultCode code; * } * * public static enum ResultCode { * LOGIN_FAILURE(8), INVALID_ARGUMENT(0), SIGN_ERROR(17); * public final int value; * ResultCode(int value){ * this.value = value; * } * } * * public static class ResultCodeSerilaizer implements ObjectSerializer { * public void write(JSONSerializer serializer, * Object object, * Object fieldName, * Type fieldType, * int features) throws IOException { * serializer.write(((ResultCode) object).value); * } * } * * SerializeConfig.getGlobalInstance().put(ResultCode.class, new ResultCodeSerilaizer()); * * Result result = new Result(); * result.code = ResultCode.SIGN_ERROR; * String json = JSON.toJSONString(result, config); // {"code":17} * Assert.assertEquals("{\"code\":17}", json); * </pre> * @author wenshao[szujobs@hotmail.com] */ public interface ObjectSerializer { /** * fastjson invokes this call-back method during serialization when it encounters a field of the * specified type. * @param serializer * @param object src the object that needs to be converted to Json. * @param fieldName parent object field name * @param fieldType parent object field type * @param features parent object field serializer features * @throws IOException */ void write(JSONSerializer serializer, // Object object, // Object fieldName, // Type fieldType, // int features) throws IOException; }