我有一个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
3条答案
按热度按时间waxmsbnn1#
我对Kotlin了解不多,但我知道你可以很好地混合Java和Kotlin,既然Gson是为Java使用而设计的,我认为你应该使用Java。你可以创建一个Java类,然后创建一个如下所示的方法:
然后从Kotlin调用该方法。
我并不是说你应该用Java来完成整个项目,只是用Java来实现这个方法。
希望这能有所帮助,如果这不是你想的,请告诉我:)
bxjv4tth2#
我刚刚使用
gson:2.2.4
测试了下面的代码,它工作正常:输出:
{"status":"a","userId":"b","fulOrderId":"c","timeStamp":"d","fulOrder":"e","checks":"f"}
我没有在android上试过,但它应该也能用。我建议你尝试更新你的gson版本,也用它写一个单元测试。
polkgigr3#
可能您已经为gson设置了
new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
,如果是这样,您只需要在json中为每个要序列化的字段添加@Expose
注解: