使用Flexjson更改属性名称

时间:2011-10-04 18:12:43

标签: java serialization flexjson

我使用FlexJson进行序列化,唯一的问题是它生成字段名称小写,而我需要它们以大写字母开头:

class Person
{
     String name;
     public String getName() { return name;}
}

序列化时,该字段序列化为name,而我需要Name

如何指定输出字段名称?我可以使用一些属性来指定所需的序列化名称吗?

1 个答案:

答案 0 :(得分:5)

您可以使用自定义转换器来实现此目的。根据Flexjson页面变换器是:

  

负责决定如何将传入的对象转换为   JSON,对JSONContext对象进行适当的调用以输出   JSON,和/或沿着转换过程传递对象。

Flexjson为此目的提供了一个抽象类AbstractTransformer;扩展并覆盖transform(Object object)以自行处理转换。

下面粘贴的是我为手动指定字段名称而编写的FieldNameTransformer代码:

public class FieldNameTransformer extends AbstractTransformer {
    private String transformedFieldName;

    public FieldNameTransformer(String transformedFieldName) {
        this.transformedFieldName = transformedFieldName;
    }

    public void transform(Object object) {
        boolean setContext = false;

        TypeContext typeContext = getContext().peekTypeContext();

        //Write comma before starting to write field name if this
        //isn't first property that is being transformed
        if (!typeContext.isFirst())
            getContext().writeComma();

        typeContext.setFirst(false);

        getContext().writeName(getTransformedFieldName());
        getContext().writeQuoted(object.toString());

        if (setContext) {
            getContext().writeCloseObject();
        }
    }

    /***
     * TRUE tells the JSONContext that this class will be handling 
     * the writing of our property name by itself. 
     */
    @Override
    public Boolean isInline() {
        return Boolean.TRUE;
    }

    public String getTransformedFieldName() {
        return this.transformedFieldName;
    }
}

以下是如何使用此自定义转换器:

JSONSerializer serializer = new JSONSerializer().transform(new FieldNameTransformer("Name"), "name");

其中原始字段的名称为“name”,但在json输出中,它将替换为Name。

示例:

{"Name":"Abdul Kareem"}