Java 使用Gson序列化和反序列化枚举
如何使用gson 2.2.4序列化和反序列化这样的简单枚举Java 使用Gson序列化和反序列化枚举,java,serialization,enums,deserialization,gson,Java,Serialization,Enums,Deserialization,Gson,如何使用gson 2.2.4序列化和反序列化这样的简单枚举 public enum Color { RED, BLUE, YELLOW; } 根据,Gson提供了Enum的默认序列化/反序列化,因此基本上应该使用标准的toJson和fromJson方法对其进行序列化和反序列化,就像使用任何其他类型一样。您可以尝试这样做 import com.google.gson.annotations.SerializedName; public enum Color { @Seria
public enum Color {
RED, BLUE, YELLOW;
}
根据,Gson提供了Enum
的默认序列化/反序列化,因此基本上应该使用标准的toJson
和fromJson
方法对其进行序列化和反序列化,就像使用任何其他类型一样。您可以尝试这样做
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;
}
}
这也很好,但不知道是哪个版本的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);
}
}
默认情况下,Gson使用枚举的名称而不是序号值来序列化和反序列化。是否有方法设置一个序列化程序和反序列化程序,以按序号值处理所有枚举?您可以为枚举添加注释
@SerializedName
。@ViliusK,这将使我的枚举序列化为字符串。valueOf(ordinal),是否有类似的注释或方法使我的序列化枚举成为int?e、 g.“颜色”:1是我想要的,而不是“颜色”:“1”。(注意1周围的双引号)链接无效。@SerializedName生成字符串而不是整数。注意:这不适用于较旧版本的GSON。它适用于2.1版和更高版本。他要求使用2.2.4版,所以这是一个非常好的方法。我经常使用它,我认为在较新版本的GSON中,用户应该倾向于使用这种方法,因为它简洁,不需要复杂的自定义序列化/反序列化代码。如何将enum的未知值淡化为未知
?例如,上面的枚举Color
应该有一个Unknown
字段,该字段表示的值不是0
、1
或2
。我有一个restful web服务,在通信时处理枚举值(1,2)而不是名称,因此服务无法解析请求中的字符串值(“Color”)。从服务中获得的响应对象被反序列化,其数值为OK。所以这种方法帮助很大。我担心,它不起作用。使用Gson 2.8.0。它怎么能工作呢?格森很聪明,但没那么聪明。