Java toJson为数据类返回一个空对象
我有一个kotlin数据类Java toJson为数据类返回一个空对象,java,android,json,kotlin,gson,Java,Android,Json,Kotlin,Gson,我有一个kotlin数据类OfflineDataRequestInfo,我想使用Gson将其转换为Json,但它总是返回一个空对象 data class OfflineDataRequestInfo ( @SerializedName("status") val status: String, @SerializedName("userId") val userId: String?, @SerializedName("f
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来实现这个方法
希望这能有所帮助,如果这不是你想要的,请告诉我:)我对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
测试了以下代码,它是有效的:
数据类OfflineDataRequestInfo(
@SerializedName(“状态”)val状态:字符串,
@SerializedName(“userId”)val userId:String?,
@SerializedName(“fulOrderId”)val fulOrderId:String,
@SerializedName(“时间戳”)val timeStamp:String,
@SerializedName(“fulOrder”)val fulOrder:String,
@SerializedName(“检查”)val检查:字符串?
)
主要内容(){
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:2.2.4
测试了以下代码,它可以工作:
数据类OfflineDataRequestInfo(
@SerializedName(“状态”)val状态:字符串,
@SerializedName(“userId”)val userId:String?,
@SerializedName(“fulOrderId”)val fulOrderId:String,
@SerializedName(“时间戳”)val timeStamp:String,
@SerializedName(“fulOrder”)val fulOrder:String,
@SerializedName(“检查”)val检查:字符串?
)
主要内容(){
println(Gson().toJson(OfflineDataRequestInfo(“a”、“b”、“c”、“d”、“e”、“f”))
}
输出:
{“status”:“a”,“userId”:“b”,“fulOrderId”:“c”,“timeStamp”:“d”,“fulOrder”:“e”,“checks”:“f”}
我没有在android上尝试过,但它也应该可以工作。
我建议您尝试更新您的gson版本,并使用它编写一个单元测试