【问题标题】:Convert parcelable Kotlin class with parent class to JSON将带有父类的可打包 Kotlin 类转换为 JSON
【发布时间】:2020-05-13 10:58:48
【问题描述】:

在我的 Android Kotlin 项目中,我有一个抽象类和一个继承抽象类的子类:

abstract class AbstractExample(
    val test2: String,
    val test3: String) : Parcelable
@Parcelize
class Example(
    val test1: String,
    test2: String,
    test3: String) : AbstractExample(test2, test3)

因为我希望我的 Example 类是可打包的,所以我使用了 @Parcelize 注释。

问题是:我在Example 类中的test2test3 上收到以下错误:

'Parcelable' constructor parameter should be 'val' or 'var'.

为了解决这个问题,我尝试了以下方法:

abstract class AbstractExample(
    open val test2: String,
    open val test3: String) : Parcelable
@Parcelize
class Example(
    val test1: String,
    override val test2: String,
    override val test3: String) : AbstractExample(test2, test3)

现在它可以编译了,但是我遇到了一个新问题:如果我想使用 Gson 将 Example 类转换为 JSON(例如,我可以将其发送到 Web 服务),那么我会收到以下错误:

Example declares multiple JSON fields named test2

然后如何修复我的两个类,以便我可以打包我的 Example 类,并且还能够使用 Gson 将其转换为 JSON?

谢谢。

【问题讨论】:

    标签: android kotlin gson parcelable


    【解决方案1】:

    一个小小的研究将我带到this,所以这里是如何解决它:

    abstract class AbstractExample(
        @Transient open val test2: String,
        @Transient open val test3: String) : Parcelable
    
    @Parcelize
    class Example(
        val test1: String,
        override val test2: String,
        override val test3: String) : AbstractExample(test2, test3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2016-01-27
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多