在ElementUnion中匹配非stantard类型
鉴于这个XML:
<param> <value> <struct> <member> <name>token</name> <value> <string>72gyVfhmicKwqMumCA0VjhOc9C7</string> </value> </member> <member> <name>status</name> <value> <string>200 OK</string> </value> </member> </struct> </value> </param>
我写了以下注释类来匹配xml:
帕拉姆:
@Root data class Param(@field:Element var value: Value)
值:
@Root data class Value(@field:ElementUnion(Element(name = "string", type = String::class, required = false), Element(name = "int", type = Int::class, required = false), Element(name = "double", type = Double::class, required = false), Element(name = "array", type = Array::class, required = false), Element(name = "struct", type = Struct::class, required = false)) val value: Any)
最后Struct:
@Root data class Member(@field:Element var name: String, @field:Element var value: Value) @Root data class Struct(@field:ElementList(inline = true) var items: MutableList<Member>) { fun add(key: String, value: Any) { items.add(Member(key, Value(value))) } }
我试图实现Struct
作为地图,但也没有幸运的,我可以序列化没有麻烦,问题是反序列化,因为XML来自一个Web API,所以没有class = ...
提示。
尝试使用type = LinkedHashMap::class
在这种情况下匹配,但失败:
Exception in thread "main" org.simpleframework.xml.core.ElementException: Element 'member' does not have a match in class java.util.LinkedHashMap at line 1