Kotlin 1.2.21 + SimpleXml 2.3.0 - consume List error (must mark set get method)

后端 未结 1 405
忘掉有多难
忘掉有多难 2021-01-11 15:52

I\'m trying to consume XML using SimpleXML by Retrofit 2. After hours of struggling with Kotlin I decided to try Java version and the convert then to Kotlin. And Java versio

相关标签:
1条回答
  • 2021-01-11 16:18

    Try to add @field to your annotation @Element*. And you may move properties to constructor and also you could add data modifier to your classes. Like this:

    @Root(name = "feed", strict = false)
    data class Feed(
            @field:ElementList(name = "entry", inline = true)
            var entriesList: List<Entry>? = null
    )
    
    @Root(name = "entry", strict = true)
    data class Entry(
            @field:Element(name = "id")
            var id: String? = null,
    
            @field:Element(name = "published")
            var published: String? = null
    )
    

    With this I had successfully deserialise xml:

    import org.simpleframework.xml.Element
    import org.simpleframework.xml.ElementList
    import org.simpleframework.xml.Root
    import org.simpleframework.xml.core.Persister
    
    private val testXml = """
    <feed>
       <entry>
            <id> someid </id>
            <published> somedate </published>
       </entry>
    
       <entry>
            <id> someid2 </id>
            <published> somedate2 </published>
       </entry>
    </feed>
    """.trimIndent()
    
    @Root(name = "feed", strict = false)
    data class Feed(
            @field:ElementList(name = "entry", inline = true)
            var entriesList: List<Entry>? = null
    )
    
    @Root(name = "entry", strict = true)
    data class Entry(
            @field:Element(name = "id")
            var id: String? = null,
    
            @field:Element(name = "published")
            var published: String? = null
    )
    
    fun main(args: Array<String>) {
        println(testXml)
    
        val serializer = Persister()
    
        val example = serializer.read(Feed::class.java, testXml)
    
        println(example)
    }
    
    0 讨论(0)
提交回复
热议问题