我使用FlexJson进行序列化,唯一的问题是它生成的字段名是小写的,而我需要它们从大写开始:
class Person
{
String name;
public String getName() { return name;}
}当序列化时,字段被序列化为name,而我需要它为Name。
如何指定输出字段名称?是否有一些属性可以用来指定所需的序列化名称?
发布于 2012-01-16 19:52:27
您可以通过使用自定义转换器来实现此目的。根据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"}https://stackoverflow.com/questions/7652231
复制相似问题