繁体   English   中英

通过改造反序列化JSON响应后,我得到了空数据

I got null data after deserialize my JSON response with retrofit

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

“结果”有不同的数据类型,即数组,其他为对象,因此我先对它进行反序列化,但是反序列化响应后,我得到了JSON整个属性的空数据,这是我的代码,谢谢救命

这是JSON:

{
  "header": "200",
  "status": "success",
  "data": [
    {
      "id": 1,
      ...
      ...
      "salary": {
        "currency": "SS",
        "minimum": "1",
        "maximum": "12"
      },
      "created_at": "aa",
      ...
      ...
    },

    {
      "id": 2,
      ...
      ...
      "salary": [],
      "created_at": "ss",
      ...
      ...
    }
  ]
}

这是数据模型:

data class JobsModel(
    val data: List<DataJobs>,
    val header: String,
    val status: String
)

data class DataJobs(
    val city: String,
    val company_name: String,
    val country: String,
    val created_at: String,
    val description: String,
    val id: Int,
    val job_title: String,
    val job_type: String,
    val logo: String,
    val requirement: String,
    val responsibility: String,
    val salary: Salary,
    val share_url: String
)

data class Salary(
    val currency: String,
    val maximum: String,
    val minimum: String
)

这是反序列化器类

class DataStateDeserializer : JsonDeserializer<JobsModel> {

    override fun deserialize(
        json: JsonElement?,
        typeOfT: Type?,
        context: JsonDeserializationContext?
    ): JobsModel {
        val jobsModel = Gson().fromJson(json, JobsModel::class.java)
        val jsonObject = json?.asJsonObject

        if (jsonObject != null) {
            if (jsonObject.has("salary")) {
                val element = jsonObject.get("salary")
                if (element != null) {
                    if (element.isJsonPrimitive || element.isJsonArray) {
                        element.asJsonArray
                    }
                } else {
                    element?.asJsonArray
                    jobsModel.header
                }
            }
        }
        return jobsModel
    }
}

这是改造

class ServiceFactory {
    private fun retrofit(): Retrofit {

        val gson = GsonBuilder()
            .registerTypeAdapter(DataJobs::class.java,DataStateDeserializer())
            .create()

        val okHttpClient = OkHttpClient().newBuilder()
            .readTimeout(30, TimeUnit.SECONDS)
            .connectTimeout(30, TimeUnit.SECONDS)
            .callTimeout(30, TimeUnit.SECONDS)
            .build()

        return Retrofit.Builder()
            .baseUrl(BuildConfig.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .client(okHttpClient)
            .build()

    }

    fun instanceServices(): Services {
        return retrofit().create(Services::class.java)
    }
}
1 个回复

我看到在一种情况下,您的薪金字段是对象,而在其他情况下,您的模型只能包含定义了类的对象:

val salary: Salary

不确定,但是也许您应该使用类似以下的方式:

val salary: Any
1 用gson和改造反序列化json

我目前正在尝试反序列化包含数百个具有相同结构的对象的json对象,如下所示: 我将如何使用gson,retrofit和rxjava做到这一点? 我能想到的唯一方法是执行以下似乎不切实际的操作。 ...

3 为什么我在wcf反序列化上得到空数据?

我有一个系统,可以在Windows与嵌入式系统之间跨不同的点对点通信通道交换消息,并且已经完成了所有这些工作,几乎都是完全由手工完成的非常标准的自定义序列化/反序列化功能,因为这很容易在Windows端的C#和嵌入式端的C之间移植。 现在,我想添加一个块,以在整个网络上的PC之间进行通信。 ...

4 从我得到的响应中反序列化数据

我得到了一个数据序列化我认为这导致了 POST 请求的问题,它获得了成功,但是当我尝试从源代码查看时,pdf 或任何文件会生成错误或空白图像。 如何反序列化我在下面的数据中得到的数据 这是功能 有了这个输入组件。 同样在这里,我将这个带有 API 调用的文件添加到我必须反序列化的源代码中 ...

5 改造api中的任意属性得到json反序列化

我有一个API响应,如下所示: 我试图了解attribute_name_that_i_know中具有任意键(长度和名称)的内容。 当我把: 在父对象的类中,sometype(嵌套对象)始终为null。 我无法弄清楚如何将嵌套数据放入对象中。 任何对象,我都不在乎。 我 ...

6 从 Web URL 反序列化 JSON 后,列表为空

我正在尝试将 JSON 格式的数据(空缺)从 web url 获取到 C# 中的对象中,以便我可以用它做其他事情。 主文件 空缺等级: VacancyCollection 类: 错误: 未处理的异常:System.NullReferenceException:未将对象引用设置为 ...

7 反序列化的 json 数据为空

我有一个序列化的输入 json 数据,我可以知道如何反序列化,因为我当前的代码是空的 输入JSON: 代码: ...

2021-04-08 10:54:58 2 46   c#
8 如何反序列化json响应

我将收到如上所示的 json 响应。 项目的数量可能会增加,例如现在有 2 个,它可能会增加,具体取决于数据库中的记录数量。 另一点是上面显示的每个属性的值将始终类似于上面的格式。 我的问题是当我使用下面的类来反序列化 json 响应时,它不起作用: 当我做 : 异常引发为: 异 ...

9 反序列化 JSON 响应

我正在使用 RestSharp 调用返回 JSON 的 API。 我向 API 发送了一个 ID 列表,API 返回一些 JSON 数组中每个 ID 的信息,键是 ID。 将此动态信息反序列化为 C# 对象的最佳方法是什么? 到目前为止,我有一个能够很好地反序列化时间戳、状态、代码、消息和错误的 ...

10 反序列化json响应

我正在使用的API除其他外具有以下两个响应: 要么 我创建了一些可以反序列化为以下响应的类: 我很难找到一种很好的方法来确定我应该根据响应使用哪个班级。 我目前有这个失败的代码: 上面的代码有误: 当其他人不知道自己从服务器那里得到什么时,他们如何从响应 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM