0

ここからこのコードを見つけました: 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 に精通していて、ここで正しい方向に向けることができれば、とても感謝しています。

4

1 に答える 1

-1

コードのこの部分を変更するだけです。

getContext().writeQuoted((String) object);

ほとんどのタイプでは、次のように変更すると機能するはずです。

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

それが Date 値に対して機能しない場合は、次のように SimpleDateFormat を統合するように書き直してください。

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
getContext().writeQuoted(sdf.format(object));

これでうまくいくはずです。

于 2012-08-23T07:50:39.623 に答える