数据类对象或数组

2024-01-03

我有一个 Kotlin 数据类,它的 arg 可以是对象或数组。有没有一种方法可以将字符串反序列化到此类中,并且不关心是否不是数组,而是以某种方式将其放入一个数组中?

data class Game(var name:List<NameItem>)
data class NameItem(var title: String, var id: Int)

数据可以以单个对象或对象数组的形式返回(我无法控制数据,因为它是第三方数据。

jsonString = "{"game":{"name":{"title":"GameName","id":22}}}"
jsonString = "{"game":{"name":[{"title":"GameName","id":22},{"title":"GameName2","id":23}]}}"

game: Game? = Gson().fromJson(jsonString  Game::class.java)

你必须写一个自定义JsonDeserializer。两者或您的班级应该具有相同的父班级。然后,写一个自定义的JsonDeserializer对于这个特定类型。

例如:

sealed class GameParent() {
    data class Game(val name: String): GameParent()
    data class GameList(val games: List<Game>): GameParent()
}

class GameDeserializer : JsonDeserializer<GameParent> {
    override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): GameParent {
        with(json) {
           if(isJsonObject) {
             // parse as Game
           }

           if(isJsonArray) {
             // parse as GameList
           }
        }
    }
}

然后,在你的GsonBuilder你必须注册这个自定义JsonDeserializer: gsonBuilder.registerTypeAdapter(GameParent::class.java, GameDeserializer());

现在,每当你的Gson expect GameParent将使用注册的解串器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据类对象或数组 的相关文章

随机推荐

  • TcpClient.Close 不关闭连接

    我有一个使用 TcpClient 和 TcpListener 通过网络进行通信的应用程序 但是 当我在客户端上调用 TcpClient Close 将其与服务器断开连接时 服务器根本没有反应 现在 在您发表有关此问题重复的评论之前this
  • 请求消息已发送。无法多次发送相同的请求消息

    我这里的代码有什么问题吗 我不断收到此错误 System InvalidOperationException 请求消息已发送 无法多次发送相同的请求消息 我的 HttpRequestMessage 位于函数内部 因此我认为每次传入 func
  • 如何在标签栏指示器中给出渐变线

    我有一个选项卡栏功能 其中显示圆环图和车辆列表 但我需要显示用户选择的选项卡 我在选项卡栏中有指标颜色 但我需要填充渐变线 如图所示 请帮助我出去 PS 如果可能 请让我知道如何将主题颜色作为主色中的原色作为渐变 return Scaffo
  • apache derby - 解释选择

    我正在使用 Apache Derby 编写 Java 应用程序 并且正在寻找 解释 语句的等效项 例如 适用于 mySQL 这在德比中行不通 有类似的东西吗 类似的事情还有 首先 有derby language logQueryPlan t
  • netlogo GIS 扩展异常:第 5 行的单元格大小无效

    我怎样才能解决像这样的netlogo错误 Extension exception invalid cell size on line 5 当我尝试使用以下命令加载 AsciiGrid asc 栅格时 set slope gis load d
  • 在 SpatialPolygonsDataFrame 对象上使用 Rcartogram

    我正在尝试做这个问题中提出的同样的事情 R 中的制图 分区统计图 https stackoverflow com questions 9319597 cartogram choropleth map in r 但从 SpatialPolyg
  • Elixir 使用去污剂和去污剂调用 Axis2 Java SOAP Web 服务

    从 Elixir 中 我尝试使用以下命令调用 SOAP Web 服务洗涤剂 https github com r icarus detergentex 它是 Erlang 库的包装器洗涤剂 https github com devinus
  • Gensim 3.8.0 至 Gensim 4.0.0

    我使用 Gensim 3 8 0 训练了 Word2Vec 模型 后来我尝试在GCP上使用Gensim 4 0 o来使用预训练模型 我使用了以下代码 model KeyedVectors load word2vec format wv pa
  • 如何为文件夹中的文件添加基于角色的安全性

    我正在构建一个 ASP NET 3 5 Web 应用程序 并且我没有使用成员资格提供程序来确保安全 在应用程序中 我有一个名为 Admin 的角色 该角色的所有文件都位于项目的 Security 文件夹内 目前 对于安全文件夹内的所有页面
  • LDAP 嵌套组成员资格过滤器

    我尝试使用 LDAP 匹配规则 但无法使用 LDAP 匹配规则过滤器检索搜索条目 这就是我发送过滤器的方式 筛选 objectclass memberof 1 2 840 113556 1 4 1941 cn gasaxena 我也将过滤器
  • 使用 scapy 指定数据包长度

    我正在尝试发送特定的数据包大小 100 字节 scapy但似乎无法得到它 我用这个来开始 sr IP dst 192 168 1 1 TCP dport 443 看看医生 帮助我不知道我是否可以使用PacketLenField来指定数据包的
  • 联合类型和条件类型的问题

    我有以下类型声明 class MyGeneric
  • 使用实体框架代码优先的 EF6 存储函数,我可以返回自定义类型吗?

    我有一个实体类 public class SomeClass public int Id get set public int Value get set public string Name get set 使用实体框架代码优先的 EF6
  • Twython OAuth1 问题,使用示例代码的 401 错误

    我正在尝试使用最新版本的 Twython 和 Python 2 7 3 设置流 我正在尝试重现中的示例流媒体文档 https twython readthedocs org en latest usage streaming api htm
  • 使用 extrafont 将字体导入 R 时如何解决“无字体名称”问题?

    我的 Windows 桌面上有一个文件夹 C Users me Desktop Fonts 其中包含我想使用导入到 R 中的字体extrafont 当我尝试使用导入字体时 library extrafont font import path
  • 将模型公式传递给另一个函数时出现对象未找到错误

    我在 R 上遇到了一个奇怪的问题 我似乎无法解决 我尝试编写一个函数 对 R 中的逐步过程选择的模型执行 K 折交叉验证 我知道逐步过程的问题 纯粹是为了比较目的 现在的问题是 如果我定义函数参数 linmod k 方向 并运行函数的内容
  • iOS - 逐帧读取视频文件,进行图像处理,然后另存为新视频文件

    我尝试从 iPhone 相册中逐帧读取视频 图像处理后 我会将它们另存为新视频 我正在运行我的代码 没有任何错误 但相册中没有新视频 这是我的代码 Video writer init BOOL setupAssetWriterForURL
  • 为什么C#中的空结构会消耗内存

    我一直理解结构 值类型 包含结构字段中定义的字节数 但是 我做了一些测试 空结构似乎有一个例外 public class EmptyStructTest static void Main string args FindMemoryLoad
  • 用户向数据库PDO添加记录

    我希望让用户将记录添加到空数据库表中 事实上 我有一个数据库和一个空表 必须使用表单填写 第一个文件处理数据库连接 我使用PDO 返回一个空页面和一个名为 add 的链接 该链接转到表单
  • 数据类对象或数组

    我有一个 Kotlin 数据类 它的 arg 可以是对象或数组 有没有一种方法可以将字符串反序列化到此类中 并且不关心是否不是数组 而是以某种方式将其放入一个数组中 data class Game var name List