2013-05-24 3 views

답변

18

Gson API documentation에 따르면, GSON 그래서 기본적으로 직렬화 및 다른 유형으로, 표준 toJsonfromJson 방법을 사용하여 직렬화해야 Enum의 디폴트의 직렬화/역 직렬화를 제공합니다.

+8

이 GSON가 직렬화 및 열거 대신 서수 값의 이름을 사용하여 직렬화 복원합니다. 하나의 serializer와 deserializer를 설정하여 모든 Enum을 순서 값으로 처리 할 수 ​​있습니까? – Churro

+11

enum에 주석'@ SerializedName'을 추가 할 수 있습니다. – ViliusK

+7

@ViliusK : 열거 형을 String.valueOf (서수)로 serialize하는 열거 형을 만들 것입니다. 직렬화 된 열거 형을 int로 만들 수있는 유사한 주석 또는 방법이 있습니까? 예 : "color": 1은 "color"가 아니라 "1"입니다. (이중 인용문을 염두에두고 약 1) – Behnam

130

시도해 볼 수 있습니다.

import com.google.gson.annotations.SerializedName; 

public enum Color { 

    @SerializedName("0") 
    RED (0), 

    @SerializedName("1") 
    BLUE (1), 

    @SerializedName("2") 
    YELLOW (2); 

    private final int value; 
    public int getValue() { 
     return value; 
    } 

    private Color(int value) { 
     this.value = value; 
    } 

} 
+2

참고 : 이전 버전의 GSON에서는 작동하지 않습니다. 버전 2.1 이상에서 작동합니다. –

+5

그는 2.2.4 버전을 요구했습니다. 그렇습니다. –

+0

이것은 정말 좋은 접근 방법입니다. 자주 사용하며 GSON의 최신 버전에서는 사용자가 간결하고 복잡한 사용자 지정 serialization/deserialization 코드가 필요 없기 때문에 사용자가이 접근 방식을 사용해야한다고 생각합니다. – jwir3

1

하지만 GSON의 버전에서이 괜찮뿐만 아니라, 모르는 작품 : 기본적으로

public enum OrderLineTimeRegistrationStatus { 
    None(0), Started(1), Paused(2); 

    private int value; 

    private OrderLineTimeRegistrationStatus(int value) 
    { 
     this.value=value; 
    } 

    public int getValue() 
    { 
     return(value); 
    } 
} 
+2

죄송합니다. 작동하지 않습니다. Gson 2.8.0 사용. 어쨌든 어떻게 작동할까요? Gson은 현명하지만 그렇게 똑똑하지는 않습니다. – waste