Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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反序列化作为Json一部分提供的类?_Java_Json_Gson_Deserialization - Fatal编程技术网

Java 如何使用Gson反序列化作为Json一部分提供的类?

Java 如何使用Gson反序列化作为Json一部分提供的类?,java,json,gson,deserialization,Java,Json,Gson,Deserialization,一个非常棒的头衔,不是吗?但实际上它指的是一些非常简单的东西。假设我有以下Json: { "type": "me.example.game.FireballSkill" "data": { "damage": 500.0, "cost": 20.0, "cooldown": 10000 } } 然后让我们假设FireballSkill类扩展了AbstractSkill,它本身实现了一个可转换的接口 我需要以某种方式接受上面的内容,从“type”标记中找到类

一个非常棒的头衔,不是吗?但实际上它指的是一些非常简单的东西。假设我有以下Json:

{
  "type": "me.example.game.FireballSkill" 
  "data": {
    "damage": 500.0,
    "cost": 20.0,
    "cooldown": 10000
  }
}
然后让我们假设FireballSkill类扩展了AbstractSkill,它本身实现了一个可转换的接口

我需要以某种方式接受上面的内容,从“type”标记中找到类,然后将“data”Json对象反序列化为我从“type”中得到的类的实例


这可能吗?有更好的方法吗?我可以这样做吗?行吗?

你可以这样做。您可以提取类名,使用
class.forName()
获取类对象,并将其和“数据”json传递到gson中。你想在这里完成什么?您真的没有比将json嵌入消息中更好的方法来确定要将其映射到的类型吗?好吧,我真的想为Castables创建一个反序列化器,它是一个接口。当然,Json中的数据将表示一个特定的类,该类以直接或间接的方式实现Castable。因此,将类名嵌入Json的目的是让CastableDeserializer知道它到底要反序列化什么:)您需要一个TypeAdapter来缓冲整个值并委托给具体类型的TypeAdapter。看看哪个前提相同。此外,Gson还有一个可插拔的示例,您可以这样做。您可以提取类名,使用
class.forName()
获取类对象,并将其和“数据”json传递到gson中。你想在这里完成什么?您真的没有比将json嵌入消息中更好的方法来确定要将其映射到的类型吗?好吧,我真的想为Castables创建一个反序列化器,它是一个接口。当然,Json中的数据将表示一个特定的类,该类以直接或间接的方式实现Castable。因此,将类名嵌入Json的目的是让CastableDeserializer知道它到底要反序列化什么:)您需要一个TypeAdapter来缓冲整个值并委托给具体类型的TypeAdapter。看看哪个前提相同。此外,Gson还有一个可插拔的示例。