在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