2013-05-09 2 views
1

Gson (클래스는 그냥 이름과 HashMap 임)과 올바르게 직렬화되지 않는 클래스가 있으므로 HashMap에서 이름과 키, 값 쌍을 인쇄하기 위해 사용자 정의 serializer를 작성했습니다.Gson Custom Serializer가 호출되지 않았습니다.

public JsonElement serialize(SpecificationGroupList sgl, Type typeofT, 
    JsonSerializationContext context) { 
System.out.println("here"); 
JsonObject ret = new JsonObject(); 
ret.addProperty("GroupName", sgl.getGroupName()); 

JsonArray jsonArray = new JsonArray(); 
ret.add("SpecificationPartList", jsonArray); 
for (Entry<String, String> entry : sgl.getSpecificationPairList().entrySet()) { 
    JsonObject temp = new JsonObject(); 
    temp.addProperty(entry.getKey(), entry.getValue()); 
    jsonArray.add(temp); 
} 

return ret; 
} 

가 적절하게 인쇄 얻으려면, 나는 사용자 정의 시리얼을 등록했지만 내가 클래스를 인쇄 할 갈 때, 실제로 시리얼 라이저를 사용하지 않습니다. 나는 serializer 인쇄가 "여기"에 있고 결코 인쇄하지 않기 때문에 알 수 있습니다.

또한 실제로는 전체 개체를 인쇄하고 직렬화하는 것이 예상대로 작동하지 않으며 개체를 직접 인쇄하려고하지도 않습니다.

{ 
    "ItemNumber": "22-148-842", 
    "NeweggItemNumber": "N82E16822148842", 
    "Title": "Seagate Savvio 15K.3 ST9300653SS 300GB 15000 RPM 2.5\" SAS 6Gb/s Internal Enterprise Hard Drive -Bare Drive", 
    "specificationGroupList": [] 
} 
sgl[] 

모든 도움을 주시면 감사하겠습니다. 물론

+0

인쇄중인 항목마다 사양 배열이 비어 있지 않은지 확인할 수 있습니다. – Perception

답변

1

, 내가 직접 내가 그것을 제거 왔으로의 코드를 복사 할 수 없습니다 나는 기본적으로 버전하지만 시작 했죠 어디 지점에 아직하지 않았다 :

ArrayList<Item> items = new ArrayList<Item>(); 
Gson gson = new Gson 

for (Item i : items){ 
    i.setId(something); 
} 

for (Item i : items){ 
    //... 
    //send query and get response here 
    //... 

    i = gson.fromJson(in, Item.class); 

} 

설정을 i 반환 된 Item 정말로 작동하지 않았고 그래서 직렬화하려고하면 내 개체의 HashMap 제대로 @ Perception 표시된대로 설정되지 않았습니다. something을 보유 할 문자열 목록을 만든 다음이를 Item에 할당하는 대신 ArrayList에 반환 된 Item을 추가하여이를 "해결"했습니다.

관련 문제