Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java toJson为数据类返回一个空对象_Java_Android_Json_Kotlin_Gson - Fatal编程技术网

Java toJson为数据类返回一个空对象

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

我有一个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来实现这个方法


希望这能有所帮助,如果这不是你想要的,请告诉我:)

我对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版本,并使用它编写一个单元测试