2012-03-06 3 views
1

웹 서비스에서 JSON 응답을 받았지만 다양한 이유로 최종 응답 객체에서 특정 속성이 직렬화되지 않게하고 싶습니다.FlexJSON은 역 직렬화시 속성을 제외합니다.

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

    //getters & setters 
} 

내가 다시 받고 있어요 JSON 응답이 두 속성을 가지고 있지만, 직렬화에 나는 "바"로 설정하지 않으 예를 들어 내가있다. 그 이유는 그들이 보내는 속성은 길지만 우리는 String이므로 deserialize는 IllegalArgumentException을 throw합니다.

다른 옵션은 json-simple과 같은 것으로 JSON을 구문 분석하고, 원하는 속성을 제거하고, JSON으로 다시 변환하고이를 deserializer로 전달하는 것입니다.하지만 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()); 
관련 문제