[英]gson.toJson returns an empty object for a data class
我有一个 kotlin 数据类OfflineDataRequestInfo
,我想使用 Gson 将其转换为 Json,但它总是返回一个空对象
data class OfflineDataRequestInfo (
@SerializedName("status") val status: String,
@SerializedName("userId") val userId: String?,
@SerializedName("fulOrderId") val fulOrderId: String,
@SerializedName("timeStamp") val timeStamp: String,
@SerializedName("fulOrder") val fulOrder: String,
@SerializedName("checks") val checks: String?
)
一些值可能为空,所以我也尝试了返回{}
的波纹管代码
gson.toJson(OfflineDataRequestInfo("a","b","c","d", "e", "f"))
这里有更多信息以防万一
@Entity
data class OfflineData (
@PrimaryKey(autoGenerate = true) val id: Int = 0,
@ColumnInfo(name="request_code") val requestCode: String?,
@Embedded
val requestInfoJson: OfflineDataRequestInfo
)
这是我的实际功能
fun postFulOurderData(offlineData: OfflineData) {
if (offlineData != null) {
val mainRepository = MainRepository(ApiHelper(RetrofitBuilder.apiService))
val builder = GsonBuilder()
builder.serializeNulls()
val gson = builder.create()
launch {
val postFulOrder = mainRepository.postFulOrderOfflineData(gson.toJson(offlineData.requestInfoJson), tokenResult.access_token)
}
}
}
我还尝试使用如上所示的 GsonBuilder 以及默认的 Gson,但没有运气
也试过gson.toJson(offlineData.requestInfoJson, OfflineDataRequestInfo::class.java)
有人可以建议我在哪里做错了吗
非常感谢您的帮助
谢谢R
我对 Kotlin 了解不多,但我知道你可以很好地混合使用 Java 和 Kotlin,而且由于 Gson 是在考虑使用 Java 的情况下制作的,所以我认为你应该使用 Java。 您可以创建一个 Java 类,然后创建一个像这样的方法:
String toJson(OfflineDataRequestInfo o) {
return new Gson().toJson(o, OfflineDataRequestInfo.class);
}
然后从 Kotlin 调用该方法。
我并不是说你应该用 Java 来完成你的整个项目,只是使用 Java 来实现这一方法。
希望这会有所帮助,如果这不是您的想法,请告诉我:)
我刚刚使用gson:2.2.4
测试了以下代码,它可以工作:
data class OfflineDataRequestInfo (
@SerializedName("status") val status: String,
@SerializedName("userId") val userId: String?,
@SerializedName("fulOrderId") val fulOrderId: String,
@SerializedName("timeStamp") val timeStamp: String,
@SerializedName("fulOrder") val fulOrder: String,
@SerializedName("checks") val checks: String?
)
fun main() {
println(Gson().toJson(OfflineDataRequestInfo("a","b","c","d", "e", "f")))
}
输出: {"status":"a","userId":"b","fulOrderId":"c","timeStamp":"d","fulOrder":"e","checks":"f"}
我没有在android上尝试过,但它也应该可以工作。 我建议您尝试更新您的 gson 版本并使用它编写单元测试。
可能您为 gson 设置了new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
设置。 如果是这样,您只需将@Expose
注释添加到要在 json 中序列化的每个字段:
data class OfflineDataRequestInfo (
@Expose @SerializedName("status") val status: String,
@Expose @SerializedName("userId") val userId: String?,
@Expose @SerializedName("fulOrderId") val fulOrderId: String,
@Expose @SerializedName("timeStamp") val timeStamp: String,
@Expose @SerializedName("fulOrder") val fulOrder: String,
@Expose @SerializedName("checks") val checks: String?
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.