Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Gson序列化和反序列化枚举_Java_Serialization_Enums_Deserialization_Gson - Fatal编程技术网

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

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

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

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。它怎么能工作呢?格森很聪明,但没那么聪明。