如何解决如何使用Moshi将json中的int列表转换为枚举的列表/数组?
我从API获得一个整数列表(实际上是枚举)。当我尝试解析它时,我得到:Unable to create converter for java.util.List<MyEnum>
我的适配器当前看起来像这样:
@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class MyEnumListAnnotation
class MyEnumListAdapter {
@ToJson
fun toJson(@MyEnumListAnnotation myEnumList: List<MyEnum>): List<Int> {
return myEnumList.map { it.type }
}
@FromJson
@MyEnumListAnnotation
fun fromJson(typeList: List<Int>): List<MyEnum> {
return typeList.map { MyEnum.from(it) }
}
}
我将其添加到网络客户端,如下所示:
Moshi.Builder()
.add([A lot of other adapters])
.add(MyEnumListAdapter())
我正在使用这样的注释(在我要解析的对象中):
data class InfoObject(
val id: String,val name: String,val email: String,val phone: String,@MyEnumListAnnotation
val myEnums: List<MyEnum>
)
如何编写适配器以使其正常工作?感谢您的所有帮助。 :)
解决方法
如果使用Moshi的x = ["a","b","c","d","e"]
y = [ 5,1,4,2,3]
def sort_list(list1,list2):
indexs = {k: v for (k,v) in zip(list2,list1)}
list2 = sorted(list2)
list1 = [indexs[i] for i in list2]
return (list1,list2)
sort_list(x,y)
>>> (['b','d','e','c','a'],[1,3,5])
(应该使用),则只需要为codegen
本身编写适配器。
MyEnum
按照您在问题中所做的方式将适配器连接到Moshi构建器。然后,更新您的class MyEnumAdapter {
@ToJson
fun toJson(enum: MyEnum): Int {
return enum.type
}
@FromJson
fun fromJson(type: Int): MyEnum {
return MyEnum.from(it)
}
}
:
InfoObject
@JsonClass(generateAdapter = true)
data class InfoObject(
@Json(name = "id") val id: String,@Json(name = "name") val name: String,@Json(name = "email") val email: String,@Json(name = "phone") val phone: String,@Json(name = "myEnums") val myEnums: List<MyEnum>
)
将确保库将为您的@JsonClass(generateAdapter = true)
自动创建一个适配器,包括InfoObject
(您试图创建自己的适配器)的适配器,因此您不必不必自己创建这些适配器。 List<MyEnum>
只是一个约定,您可以忽略它。
要集成@Json(name="...")
,只需添加到依赖项:
codegen
有关更多详细信息,请参见https://github.com/square/moshi。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。