使用Gson序列化和反序列化枚举

use*_*448 58 java enums serialization gson deserialization

如何使用gson 2.2.4对这样的简单枚举进行序列化和反序列化?

public enum Color {

    RED, BLUE, YELLOW;
}
Run Code Online (Sandbox Code Playgroud)

Jul*_*ues 177

你可以试试这个.

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 他要求2.2.4版,所以是的 (7认同)
  • 如何将未知的枚举值淡化为"未知"?例如,上面的枚举"颜色"应该有一个"未知"字段,它表示的值不是"0","1"或"2". (4认同)
  • 注意:这不适用于旧版本的GSON.它适用于2.1及更高版本. (2认同)

Mik*_*ikO 28

根据Gson API文档,Gson提供了默认的序列化/反序列化Enum,因此基本上它应该使用标准toJsonfromJson方法进行序列化和反序列化,就像任何其他类型一样.

  • 链接已经死了. (15认同)
  • 您可以为枚举添加注释`@ SerializedName`. (13认同)
  • 默认情况下,Gson使用枚举的名称而不是序数值序列化和反序列化.有没有办法设置一个序列化器和反序列化器按其序数值处理所有枚举? (12认同)
  • @ViliusK将使我的枚举序列化为String.valueOf(序数),是否有类似的注释或方法使我的序列化枚举成为一个int?例如"颜色":1是我想要的,而不是"颜色":"1".(注意1左右的双引号) (11认同)