首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Flexjson更改属性名称

使用Flexjson更改属性名称
EN

Stack Overflow用户
提问于 2011-10-05 02:12:43
回答 1查看 2.9K关注 0票数 3

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

代码语言:javascript
复制
class Person
{
     String name;
     public String getName() { return name;}
}

当序列化时,字段被序列化为name,而我需要它为Name

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-16 19:52:27

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

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

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

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

代码语言:javascript
复制
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;
    }
}

下面是这个自定义转换器的使用方法:

代码语言:javascript
复制
JSONSerializer serializer = new JSONSerializer().transform(new FieldNameTransformer("Name"), "name");

其中,原始字段的名称是' Name‘,但在json输出中,它将被替换为name。

示例:

代码语言:javascript
复制
{"Name":"Abdul Kareem"}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7652231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档