使用 xstream 自定义 java 集合的序列化
我有一个需要序列化为 XML 的对象,其中包含以下字段:
List<String> tags = new List<String>();
XStream 将其序列化得很好(在一些别名之后),如下所示:
<tags>
<string>tagOne</string>
<string>tagTwo</string>
<string>tagThree</string>
<string>tagFour</string>
</tags>
就目前而言还可以,但我希望能够重命名
元素到
。从 XStream 站点上的别名文档中我看不到明显的方法来做到这一点。我错过了一些明显的事情吗?
I have an object that needs to be serialised as XML, which contains the following field:
List<String> tags = new List<String>();
XStream serialises it just fine (after some aliases) like this:
<tags>
<string>tagOne</string>
<string>tagTwo</string>
<string>tagThree</string>
<string>tagFour</string>
</tags>
That's OK as far as it goes, but I'd like to be able to rename the <string>
elements to, say, <tag>
. I can't see an obvious way to do that from the alias documentation on the XStream site. Am I missing something obvious?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
出于兴趣,我尝试在不编写自己的转换器的情况下做到这一点。基本上我只是为某个类中的某个字段注册一个特殊指令版本的
CollectionConverter
。相关片段:
完整的示例:
未经测试,但这应该可行。不?
Out of interest I gave it a try to do it without writing my own converter. Basically I just register a special instructed version of
CollectionConverter
for a certain field in a certain class.Relevant snippet:
Full-blown example:
Not tested but this should work. No?
我建议将
List
更改为List
,其中 Tag 是一个域对象,本质上只包含一个 String。然后你说:你就得到了你想要的。这避免了必须推出自己的转换器。
I'd suggest changing the
List<String>
to aList<Tag>
, where Tag is a domain object that essentially just contains a String. Then you say:and you get exactly what you want. This avoids having to roll your own Converter.
xml 结果:
xml result:
为
java.util.String
类添加别名。好吧,这可能会破坏其他地方的其他东西,但在这种情况下,这应该足够了。如果您不想执行上述操作,您可以制作自己的转换器(看到这个方便教程)这将帮助您实现您的目标。也不要害怕制作自己的转换器,它们非常容易实现。
Add alias for the
java.util.String
class. Okay, that may break something else elsewhere but in this exact case that should be enough.If you don't want to do the thing above, you can make your own converters (see this handy tutorial) which will help you achieve your goal. And don't be afraid of making your own converter either, they're really easy to implement.
并在 ListToStringXStreamConverter.java 中
and in ListToStringXStreamConverter.java
对我来说,使用字符串可以使用下面的代码:
for me works with the code below, using Strings: