Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Kotlin 将枚举序列化为整数值_Kotlin_Gson - Fatal编程技术网

Kotlin 将枚举序列化为整数值

Kotlin 将枚举序列化为整数值,kotlin,gson,Kotlin,Gson,我有以下枚举: enum class Scopes(val value: Int) { NODE(0), API(1), PROJECT(2), GLOBAL_TO_OWNER(3), PUBLIC_TO_ANYONE(4) } 我想序列化它,以便将枚举值(其序号)导出为整数,而不是字符串。例如: {"scope": 1} 我不想要的是: {"scope": "1"} 如果可以使用Gson实

我有以下枚举:

enum class Scopes(val value: Int) {
    NODE(0),
    API(1),
    PROJECT(2),
    GLOBAL_TO_OWNER(3),
    PUBLIC_TO_ANYONE(4)
}
我想序列化它,以便将枚举值(其序号)导出为整数,而不是字符串。例如:

{"scope": 1}
我不想要的是:

{"scope": "1"}

如果可以使用Gson实现这一点,则这是首选。如果不是,也许本地Kotlin方法就可以了。

简单地重写
序列化
就可以了

import com.google.gson.GsonBuilder
import com.google.gson.JsonElement
import com.google.gson.JsonObject
import com.google.gson.JsonSerializationContext
import com.google.gson.JsonSerializer
import java.lang.reflect.Type

enum class Scopes(val value: Int) : JsonSerializer<Scopes> {
    NODE(0), API(1), PROJECT(2), GLOBAL_TO_OWNER(3), PUBLIC_TO_ANYONE(4);

    override fun serialize(p0: Scopes?, p1: Type?, p2: JsonSerializationContext?): JsonElement =
        JsonObject().apply { addProperty(p0?.name, p0?.value) }
}

fun main(args: Array<String>) {
    val s = Scopes.NODE
    val gson = GsonBuilder().registerTypeAdapter(Scopes::class.java, Scopes.API).create()
    val jsonString = gson.toJson(s)
    println(jsonString)
}
import com.google.gson.GsonBuilder
导入com.google.gson.JsonElement
导入com.google.gson.JsonObject
导入com.google.gson.JsonSerializationContext
导入com.google.gson.JsonSerializer
导入java.lang.reflect.Type
枚举类作用域(val值:Int):JsonSerializer{
节点(0)、API(1)、项目(2)、全局所有者(3)、公共所有者(4);
重写有趣的序列化(p0:Scopes?、p1:Type?、p2:JsonSerializationContext?):JsonElement=
JsonObject().apply{addProperty(p0?name,p0?value)}
}
趣味主线(args:Array){
val s=Scopes.NODE
val gson=GsonBuilder().registerTypeAdapter(Scopes::class.java,Scopes.API).create()
val jsonString=gson.toJson(s)
println(jsonString)
}

简单重写
序列化
就可以了

import com.google.gson.GsonBuilder
import com.google.gson.JsonElement
import com.google.gson.JsonObject
import com.google.gson.JsonSerializationContext
import com.google.gson.JsonSerializer
import java.lang.reflect.Type

enum class Scopes(val value: Int) : JsonSerializer<Scopes> {
    NODE(0), API(1), PROJECT(2), GLOBAL_TO_OWNER(3), PUBLIC_TO_ANYONE(4);

    override fun serialize(p0: Scopes?, p1: Type?, p2: JsonSerializationContext?): JsonElement =
        JsonObject().apply { addProperty(p0?.name, p0?.value) }
}

fun main(args: Array<String>) {
    val s = Scopes.NODE
    val gson = GsonBuilder().registerTypeAdapter(Scopes::class.java, Scopes.API).create()
    val jsonString = gson.toJson(s)
    println(jsonString)
}
import com.google.gson.GsonBuilder
导入com.google.gson.JsonElement
导入com.google.gson.JsonObject
导入com.google.gson.JsonSerializationContext
导入com.google.gson.JsonSerializer
导入java.lang.reflect.Type
枚举类作用域(val值:Int):JsonSerializer{
节点(0)、API(1)、项目(2)、全局所有者(3)、公共所有者(4);
重写有趣的序列化(p0:Scopes?、p1:Type?、p2:JsonSerializationContext?):JsonElement=
JsonObject().apply{addProperty(p0?name,p0?value)}
}
趣味主线(args:Array){
val s=Scopes.NODE
val gson=GsonBuilder().registerTypeAdapter(Scopes::class.java,Scopes.API).create()
val jsonString=gson.toJson(s)
println(jsonString)
}

枚举被用作更大JSON对象的一部分,因此我不确定这将如何工作。val s=Scopes.NODE仅引用单个枚举成员。我保持我的代码样本简单。更现实的是{“id”:“abc”,scopeId:2,name:“Steve”}。整个JSON对象是在某些类实例上使用toJson创建的,而不仅仅是我展示的枚举。我在其他SO示例中看到过registerTypeAdapter,但似乎有很多代码只是为了得到一个int。枚举被用作更大的JSON对象的一部分,所以我不确定这将如何工作。val s=Scopes.NODE仅引用单个枚举成员。我保持我的代码样本简单。更现实的是{“id”:“abc”,scopeId:2,name:“Steve”}。整个JSON对象是在某些类实例上使用toJson创建的,而不仅仅是我展示的枚举。我在其他SO示例中见过registerTypeAdapter,但似乎有很多代码只是为了得到一个int。