2012-03-06 14 views
1

WebサービスからJSON応答を受信して​​いますが、さまざまな理由で特定のプロパティを最終応答オブジェクトに直列化しないようにしたいと思います。例えば、私が持っている:私は戻って取得していますFlexJSONは逆シリアル化時にプロパティを除外します

public class Foo { 
    private String bar; 
    private int baz; 

    //getters & setters 
} 

JSONレスポンスは、両方の性質を持っていますが、直列化復元時に、私は「バー」を設定する必要はありません。その理由は、送信しているプロパティーは長いが、私たちはStringであるため、デシリアライズするとIllegalArgumentExceptionがスローされます。

もう1つの選択肢は、json-simpleのようなものでJSONを解析し、必要なプロパティを削除し、JSONに変換してデシリアライザに渡しますが、JSONかなり大きいです。

おそらくObjectFactoryでこれを行う方法はありますか?

答えて

2

はいLongからStringへの変換を可能にするために、ObjectFactoryを使用できます。あなたも、文字列のデフォルトのObjectFactoryとして、それはデシリアライザに入ってくる任意の文字列のためにそのような場合に対処することを登録することができ

new JSONDeserializer().use("some.path.to.bar", new EnhancedStringObjectFactory()).deserialize(json, new SomeObject()); 



public class EnhancedStringObjectFactory implements ObjectFactory { 
    public Object instantiate(ObjectBinder context, Object value, Type targetType, Class targetClass) { 
     if(value instanceof String) { 
      return value; 
     } else if(value instanceof Number) { 
      return ((Number)value).toString(); 
     } else { 
      throw context.cannotConvertValueToTargetType(value, String.class); 
     } 
    } 
} 

:単純のようなあなたのパス上のObjectFactoryを登録

new JSONDeserializer().use(String.class, new EnhancedStringObjectFactory()).deserialize(json, new SomeObject());