2014-12-05 4 views
0

json 객체를 문자열로 파싱하려면 deserialization을 구현하려고하지만 사용자 정의 직렬화 가능 클래스는 호출되지 않습니다.JSON 객체를 문자열로 역 직렬화

MyDeserializer myDeserializer = new MyDeserializer(); 
Gson gson = new GsonBuilder().registerTypeAdapter(NotificationResponse.class, myDeserializer).create(); 
mRestAdapter = new RestAdapter.Builder().setServer(baseUrl).setConverter(new GsonConverter(gson)).setLogLevel(RestAdapter.LogLevel.FULL).setRequestInterceptor(new RequestInterceptor() 
      { 
       @Override 
       public void intercept(RequestFacade requestFacade) { 
       } 
      }).build(); 
+0

확인 : http://stackoverflow.com/questions/26814673/android-jsonarray-to-arraylist/26814776#26814776 –

+0

내 문제는 사용자 정의 디시리얼라이저가 호출되지 않을 것입니다. – swati

+0

올바르게 구현하려면 "gson()"함수를 호출하기 위해 만든 동일한 "gson"객체를 사용해야합니다. 그렇지 않으면 새로운 Gson()처럼 매번 초기화하면 Desiralizer 클래스가 호출되지 않습니다. –

답변

0

내가 this 튜토리얼의 (a 디시리얼라이저를 구현하는 데 도움이됩니다 생각 -이 : 필요

JSON은

public class MyDeserializer implements JsonDeserializer<StudentData> { 

@Override 
public StudentData deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) { 
    try { 

     String content = je.getAsJsonObject().get("student").getAsString(); 

     return new Gson().fromJson(content, StudentData) 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 
} 

내 디시리얼라이저를 등록이

{ 

"status": true, 
"student": [ 
    { 
     "id": 1, 
     "name": "", 
     "age": "", 
     "title": "", 

    } 
] 
} 

내 Deserializable 클래스를 구문 분석 새로운 개념을 도입 할 수도 있음)

시험해보고 효과가 있는지 확인하십시오.

0

단순한 것으로 Gson을 의존성으로 추가하는 것이 가치가 있다고 생각하지 않습니다.

예 :

JSONObject jObj = new JSONObject(theJsonYouPostedAbove); 
boolean status = jObj.getBoolean("status"); 
JSONArray jArr = jObj.getJSONArray("student"); 
for (int i = 0; i < jArr.length(); i++) { 
    JSONObject jo = jArr.getJSONObject(i); 
    int id = jo.getInt("id"); 
    String name = jo.getString("name"); 
    ... 
}