如何使用 XStream 将默认值为空字符串的 XML 解组?

How to unmarshall XML with default value as empty string using XStream?

我想弄清楚如何在缺少标签时解组 XML,我可以将默认值设置为空字符串而不是 NULL。当前 XStream 正在使用 null,这不是我想要的。

这个 class 有 40 多个属性,它们都是字符串。每个都有一个具有默认值的构造函数。我的意思是,像这样:

case class MyData(id: String = "", b: String = "", ....) 

(是的,我正在尝试将它与 Scala 一起使用)

从技术上讲,我可以编写一个自定义转换器,将它们设置为空字符串,但这感觉有点傻。

我试过用这个

new XStream(new PureJavaReflectionProvider()) 

根据此处的建议:

不过好像不行。

还有其他想法吗?

XStreams 使用默认的空构造函数,然后通过调用 setter 来跟进它。因此,要使其在没有自定义转换器的情况下工作,您将需要创建一个显式的空构造函数,用您期望的默认值填充所有内容。这是一个示例,工作应用程序:

import com.thoughtworks.xstream.XStream
import com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider

object Hello extends App {
  val xstream = new XStream(new PureJavaReflectionProvider())
  xstream.alias("MyData", classOf[MyData])
  val output = xstream.fromXML("<MyData><id>This should fill in</id></MyData>")
  println(output)
}

case class MyData(id: String = "", var b: String = "") 
{
   def this() = this("", "")
}