【问题标题】:Kotlin Map Serialization and Deserialization error class with map objects带有地图对象的 Kotlin 地图序列化和反序列化错误类
【发布时间】:2021-02-02 18:49:11
【问题描述】:

我正在尝试创建序列化和反序列化对象。我正在这样做:

   var mapper = ObjectMapper()

   var stringTest =   mapper.writeValueAsString(stringContainsObjectFilter);
    
   val raw: Any = mapper.readValue(stringTest, Any::class.java)
   val filtersFromString = mapper.convertValue(raw, ObjectFilter::class.java)

   val objectFilters = ObjectFilter()
   quoteFilters.rosterLine= filtersFromString.rosterLine
   quoteFilters.outOfPocketMax = filtersFromString.outOfPocketMax
   quoteFilters.cost = filtersFromString.cost

这是我要序列化和反序列化的类

open  class ObjectFilter{

    var rosterLine: Map<RosterEnum, List<Int>>? = null

    var outOfPocketMax: Map<String?, List<Int>>? = null

    var monthlyCost: List<MonthlyCost>? = null

}

但我收到以下消息:

"Response[ObjectFilters]; could not unconvert attribute"

谁能帮帮我?我一直试图解决它没有结果:(

【问题讨论】:

  • 你在哪一行得到这个错误?为什么在声明之前使用objectFilters
  • 另外,我同时看到了ObjectFilterObjectFilters,这似乎很奇怪。
  • 谢谢@MichaelPiefel,我在mapper.convertvalue 上遇到了错误,我改成了那个,我写了,正如你在我的回答中看到的那样。感谢您抽出宝贵时间阅读我的问题。
  • 你可能想用val mapper = ObjectMapper().registerKotlinModule()创建你的映射器
  • 是的,这可能是一个解决方案,我会尝试。感谢您的帮助。

标签: kotlin serialization amazon-dynamodb deserialization mapper


【解决方案1】:

我找到了解决方案,这就是我所做的并且成功了:

val rawResult = mapper.convertValue(mapper.readValue(string, Any::class.java), Any::class.java)
        val filtersFromString = rawResult  as? ObjectFilter ?: ObjectFilter()

【讨论】:

  • convertValue() 是做什么的?从Any 转换为Any?为什么你不首先将预期的课程传递给readValue()?而且,由于您使用的是 Kotlin,因此您可以尝试使用 mapper.readValue&lt;ObjectFilter&gt;(string)
  • 嗨@MichaelPiefel,它的作用是从mapper.read转换值,我试图不在::class.java中使用任何值,但我得到一个异常,说mapper是当我指定它的名称时无法转换我的类,所以唯一对我有用的解决方案就是我写的那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
相关资源
最近更新 更多