当前位置: 首页 > 知识库问答 >
问题:

使用Gson填充Kotlin数据类

徐德海
2023-03-14

我正在尝试从相应的字符串值填充Kotlin数据类。我使用GSON查看了来自Json的:Kotlin数据类,但我试图做的并不是跟踪完全相同的:

fun convertStringToObject(stringValue: String?, clazz: Class<*>): Any? {
    return if (stringValue != null) {
        try {
            val gson = Gson()

            gson.fromJson<Any>(stringValue, clazz)
        }
        catch (exception: Exception) {
            // yes, we are swallowing the possible 
            // java.lang.IllegalStateException
            null
        }
    }
    else {
        null
    }
}

调用此函数并尝试填充以下类:

data class LoggedUser(
    @SerializedName("id") val id: Long,
    @SerializedName("name") val name: String,
    @SerializedName("first_name") val firstName: String,
    @SerializedName("last_name") val lastName: String,
    @SerializedName("email") val email: String
)
{"nameValuePairs":{"id":"1654488452866661","name":"Bob Smith","email":"bob.smith@test.net","first_name":"Bob","last_name":"Smith"}}
gson.fromJson(stringValue, LoggedUser::class.java)

但没有欢乐。stringValue是gson.toJson(value)生成的东西,其中value是一个JSONObject。

有人知道我的断线是什么吗?

共有1个答案

公羊渝
2023-03-14

您的JSON字符串实际上有两个JSON对象,即外部值(它有一个名为NameValuePairs的键)和您实际想要反序列化的值(它是键NameValuePairs处的值)。您需要深入一级,或者通过保存用户对象的外部包装类,或者通过手动获取键namevaluepairs处的JsonObject作为字符串,然后将其传递给GSON。如果字符串只是{“id”:“1654488452866661”,“name”:“Bob Smith”,“email”:“bob.smith@test.net”,“first_name”:“bob”,“last_name”:“Smith”}则反序列化很好。

 类似资料:
  • 问题内容: 我有这样的Java POJO类: 我有一个像这样的Kotlin数据类 如何在java变量中提供给诸如注解之类的任何变量? 问题答案: 资料类别: 到JSON: 从JSON:

  • 问题内容: 我正在尝试使用我的Derby数据库数据填充Netbeans GUI-builder jTable。 我在Account.java类中使用以下代码: 理想情况下,我希望能够返回其中包含参数数据和列的tableModel,因为我知道在GUI中执行此方法是一种不好的做法。在线上的所有教程都没有显示如何将数据发送到另一个类,它们只是在GUI类中执行数据库代码。 我有一个错误,它看不到数据和列,

  • 我在Account.java类中使用以下代码: 理想情况下,我希望能够返回包含参数数据和列的tableModel,因为我知道在我的GUI中使用这种方法是不好的做法。所有在线教程都没有显示如何将数据发送到另一个类,它们只是在GUI类中执行数据库代码。 我有一个错误,它无法看到数据和列,因为它们是在我的方法的一个不可访问的部分中声明和使用的。在我完成这些之后,我需要找到一种方法来将它传递给我的GUI类

  • series(string $value,[ string $categories]) string $value $config = ['path' => './tests']; ​ $fileObject = new \Vtiful\Kernel\Excel($config); ​ $fileObject = $fileObject->fileName('tutorial.xlsx'); $

  • factory 辅助函数 必须 使用 factory 方法来做数据填充,因为是框架提倡的,并且可以同时为测试代码服务。 运行效率 开发数据填充时,必须 特别注意 php artisan db:seed 的运行效率,否则随着项目的代码量越来越大,db:seed 的运行时间会变得越来越长,有些项目多达几分钟甚至几十分钟。 原则是: Keep it lighting speed. 只有当 db:seed

  • 我有Java POJO课是这样的: 我有一个像这样的Kotlin数据课 如何向的任何变量提供,如Java变量中的注释?