使用Flexjson更改属性名称

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

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

序列化时,字段序列化为name ,而我需要将其NameName

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

您可以使用Custom Transformer实现此目的。 根据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"}