【问题标题】:Moshi: Expected a Class, ParameterizedType, or GenericArrayType, but <null> is of type nullMoshi:需要一个类、ParameterizedType 或 GenericArrayType,但 <null> 的类型为 null
【发布时间】:2017-12-13 11:47:31
【问题描述】:

我有这个模型:

class Model1 {
    <... other fields here ...>
    var attributes: Map<String, Any>? = null
    <... other fields here ...>
}

我希望得到这些模型的列表。

示例 JSON:

[
    {
        "attributes": {
            "title": "New Year's Day",
            "country": "SG"
        }
    },
    {
        "attributes": {
            "staff_id": 320011,
            "title": "Labor day",
            "date_joined": "2017-01-10 00:00:00",
            "years": 1
        }
    }
]

然后我在反序列化过程中得到这个错误:

Caused by: java.lang.IllegalArgumentException: Expected a Class, ParameterizedType, or GenericArrayType, but <null> is of type null
    at com.squareup.moshi.Types.getRawType(Types.java:165)
    at com.squareup.moshi.ClassJsonAdapter$1.createFieldBindings(ClassJsonAdapter.java:82)
    at com.squareup.moshi.ClassJsonAdapter$1.create(ClassJsonAdapter.java:74)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:57)
    at com.squareup.moshi.MapJsonAdapter.<init>(MapJsonAdapter.java:46)
    at com.squareup.moshi.MapJsonAdapter$1.create(MapJsonAdapter.java:37)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
    at com.squareup.moshi.ClassJsonAdapter$1.createFieldBindings(ClassJsonAdapter.java:90)
    at com.squareup.moshi.ClassJsonAdapter$1.create(ClassJsonAdapter.java:74)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:57)
    at com.squareup.moshi.CollectionJsonAdapter.newArrayListAdapter(CollectionJsonAdapter.java:51)
    at com.squareup.moshi.CollectionJsonAdapter$1.create(CollectionJsonAdapter.java:35)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
    at com.squareup.moshi.ClassJsonAdapter$1.createFieldBindings(ClassJsonAdapter.java:90)
    at com.squareup.moshi.ClassJsonAdapter$1.create(ClassJsonAdapter.java:74)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
    at retrofit2.converter.moshi.MoshiConverterFactory.responseBodyConverter(MoshiConverterFactory.java:91)
    at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:330)
    at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:313)
    at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:736)
        ... 65 more

我需要将字段属性作为地图。里面的数据可以是任意类型任意值

【问题讨论】:

标签: android kotlin moshi


【解决方案1】:

您希望在地图参数上使用@JvmSuppressWildcardshttps://github.com/square/moshi/issues/410#issuecomment-351131524

希望下一个版本的 Moshi 会出现更好的错误消息。

【讨论】:

    【解决方案2】:

    只需要这样做:

    class Model1 {
        <... other fields here ...>
        @JvmSuppressWildcards var attributes: Map<String, Any>? = null
        <... other fields here ...>
    }
    

    https://github.com/square/moshi/issues/410#issuecomment-351131524

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2021-09-18
      • 2021-06-06
      • 2021-07-13
      • 2021-11-10
      • 1970-01-01
      • 2021-10-31
      • 2022-01-26
      • 2022-01-05
      相关资源
      最近更新 更多