Android 通过改装处理Kotlin序列化MissingFieldException

Android 通过改装处理Kotlin序列化MissingFieldException,android,json,retrofit2,kotlinx.serialization,Android,Json,Retrofit2,Kotlinx.serialization,我正在与一起使用。我收到的json响应在包含哪些属性方面会有所不同。在大多数情况下,我的应用程序中的数据模型包含的字段比我在响应中收到的字段多。我无法控制它,所以我需要用代码来处理它 在这种情况下,Kotlinx.serialization会抛出MissingFieldException。我知道,当使用Json.parse时,您可以将其包装在try-catch块中并忽略此类错误。但由于我使用的是改装,我看不到使用这种方法的方法: WebService.kt interface WebServic

我正在与一起使用。我收到的json响应在包含哪些属性方面会有所不同。在大多数情况下,我的应用程序中的数据模型包含的字段比我在响应中收到的字段多。我无法控制它,所以我需要用代码来处理它

在这种情况下,Kotlinx.serialization会抛出
MissingFieldException
。我知道,当使用
Json.parse
时,您可以将其包装在try-catch块中并忽略此类错误。但由于我使用的是改装,我看不到使用这种方法的方法:

WebService.kt

interface WebService {
    @GET("person.json")
    fun getPerson(): Call<MainActivity.Person>
}
由于该json不包含数据类中的
missing
字段,因此应用程序崩溃并抛出
missingfieldeception
。我想知道如何在改装案例中避免这个问题


感谢您的帮助。

实际上它无法从json创建
Person
对象,因为您的
Person
类构造函数需要3个值。您必须满足此要求才能创建对象

解决此问题的一个可能解决方案是在Kotlin中使用默认值,如下所示:

data class Person(
    var name: String="", 
    var species: String="", 
    var missing: String="") 

另一种解决方案是使用多个构造函数,但参数的数量不尽相同,但由于您提到了它可能会随着时间的推移而不同,因此此解决方案可能并不方便。谢谢

请尝试在您的
Person
数据模型中添加默认值。希望这能帮助您工作,但我希望这不会要求我在所有数据模型中设置默认值。实际应用程序要复杂得多。如果你把这个作为一个答案,而我没有得到更好的答案,那么我会接受这个。非常感谢你!非常感谢。我最终可能不得不求助于此。我希望能找到一个可以放松这一要求的环境。例如,Gson没有这样的要求。如果我最终使用这个,我会接受这个答案。当然,没问题。您也可以尝试
vararg
获取类似类型的参数,尽管它会丢失键->值功能
{"name":"me", "species":"superhuman"}
data class Person(
    var name: String="", 
    var species: String="", 
    var missing: String="")