Соответствие нестандартных типов в ElementUnion

Учитывая этот 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:

Param:

 @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 происходит из веб-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