2013-04-25 3 views
1

내가 가진 객체와 같은 :JSON 할 수있는 JSON 형식의 문자열을 가진 개체를 직렬화

public class Foo{ 
    public String f1="[{\"jsonField\":\"something\"},{\"jsonField\":\"something\"}]"; 
} 
GSON는 그것을 직렬화 할

: 문자열로 직렬화 된

{"f1":"[{\"jsonField\":\"something\"},{\"jsonField\":\"something\"}]"} 

에서 F1 필드 . 분명히이 필드는 잘 형성된 json 형식 문자열입니다. 다음과 같이 필드를 jso 배열로 직렬화하려면 어떻게해야합니까?

{"f1":[{"jsonField":"something"},{"jsonField":"something"}]} 

PS. 성능 고려 사항을 위해 비 직렬화 한 다음 필드를 serialize 할 수 없습니다.

+2

, 당신은 사용할 수 있습니다

GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(MyObject.class, new SomethingGsonAdapter()); Gson gson = builder.create() 

는 그리고 당신은 정의해야 그러나 경우에 따라). – nullPainter

+0

@nullPainter에 감사드립니다! 이게 내가 원하는거야! 특수 효과가 잘 작동합니다. –

답변

0

Gson이 문자열 필드를 문자열로 직렬화하고 있습니다. 그건 정상입니다.

{"f1":["jsonField:something","jsonField:something"]} 

을 그리고 그것은 무엇인가라는 필드가있는 목록이 있다면 jsonField 당신은 당신이 실제로 원하는 것을 얻을 것입니다 : 당신의 분야는, 그러나, List<String> 인 경우, GSON 당신을 줄 것이다.

이것은 Gson이 개체를 직렬화하는 암시적인 방식입니다. 당신이 그것을 좋아하지 않으면, 당신은 자신의 TypeAdapter을 구현하고 빌더에 Gson에 등록해야합니다. 의`답변으로 제거 필드 (에 JsonRawValue` 주석 @ 당신이 사용하고 같은 GSON 당신이 잭슨을 사용하는 경우

public class SomethingGsonAdapter implements JsonDeserializer<DataItem>, JsonSerializer<DataItem>; 
관련 문제