如何使用 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("", "")
}
我想弄清楚如何在缺少标签时解组 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("", "")
}