ここからこのコードを見つけました: Flexjsonでプロパティ名を変更する
String データ型では機能しますが、他のデータ型では機能しないようです。何か案は?
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((String) object);
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;
}
}
これはテキスト フィールドでは問題なく機能しますが、日付のフィールドに適用しようとすると非常に不満になります。例えば:
String JSON = new JSONSerializer()
.include("type", "createDate")
.exclude("*")
.transform(new DateTransformer("MM/dd/yyyy"), Date.class)
.transform(new FieldNameTransformer("new_json_property_name"),"createDate")
.serialize(stuff);
JSONException が発生して失敗: DeepSerialize しようとしてエラーが発生しました
transform new Field... 行をコメントアウトすると正常に動作し、文字列であるタイプフィールドを変更しようとすると正常に動作します。
また、Int を変更しようとすると失敗し、文字列ではない他のすべてのものを期待します。
誰かが FlexJSON API に精通していて、ここで正しい方向に向けることができれば、とても感謝しています。