2016-10-20 3 views
0
내가 GSON으로 개조를 사용하고

을 가진 튜플의 배열과 내가 JSON 객체가이 좋아하는이 : "수수료"[[0,0.26]를 [50000,0.24], [100000,0.22] Gson을 사용하여 튜플 배열로 어떻게 비 직렬화 할 것인가? 뭔가가 좋아해요.역 직렬화 GSON

public class MyClass{ 
    public List<MyTuple> Fees; 
} 

public class MyTuple{ 
    public int volume; 
    public double percentFee; 
} 

답변

0

첫 번째 참고 : MyClass을 다음과 같이 정의하면 더 좋습니다. 대신에 'F'

public MyClass { 
public List<MyTuple> fees; 
} 

다음 코드의 작은 'F'를 사용하는 GSON 디시리얼라이저가 내 문제를 해결하는 정의를 작성하여 문자열

Gson gson = new Gson(); 
MyClass myClass = gson.fromJson(jsonString, MyClass.class); 
+0

내가 튜플의 목록을 가지고 있기 때문에 귀하의 솔루션이 작동하지 않는 코드입니다. 각 튜플은 2 개의 다른 객체 유형 (정수 및 이중)의 2 요소 배열입니다. 어떤 생각? – h2nghia

+0

컴파일 오류가 발생 했습니까? 또는 데이터가 제대로 deserialized되지 않습니다? –

+0

도움 주셔서 감사합니다. 마지막으로 사용자 정의 Gson 디시리얼라이저를 분석하여이를 파싱하는 방법을 배웁니다. – h2nghia

0

를 역 직렬화하는 데 사용할 수 있습니다. 여기 코드는 다음과 같습니다

여기
GsonBuilder gsonBuilder = new GsonBuilder(); 
gsonBuilder.registerTypeAdapter(MyTuple.class, new MyTupleDeserializer()); 
Gson gson = gsonBuilder.create(); 
MyClass myClass= gson.fromJson(json, MyClass.class); 

는 MyTupleDeserializer 클래스

private class MyTupleDeserializer implements JsonDeserializer<MyTuple> { 
    @Override 
    public MyTuple deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { 
     JsonArray tupleValues= json.getAsJsonArray(); 
     MyTuple myTuple= new MyTuple(); 
     myTuple.setVolume(tupleValues.get(0).getAsInt()); 
     myTuple.setPercentFee(tupleValues.get(1).getAsDouble()); 
     return myTuple; 
    } 
}