gpt4 book ai didi

java - XStream:如何在自定义转换器中编码/解码列表?

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:02 25 4
gpt4 key购买 nike

我有以下使用自定义转换器序列化的类(遗留的;不可注释的):

class Test {

// some other variables

List<SomeType> someTypeList;

}

SomeType 的正常工作转换器已经可用。但是我希望列表被序列化,就好像它是用@XStreamAlias("someTypes") 注释的一样。

最后我希望 someTypeList 的格式如下:

<someTypes class="list-type">
<someType>
....
</someType>
...
</someTypes>

我必须如何实现 marshal/unmarshal 方法才能获得所需的输出?调用 context.convertAnother(someTypeList) 没有产生预期的结果,因为周围的 <someTypes>标签丢失。

最佳答案

你明智地获得结构:

<someTypes class="list-type">  
<someType>
....
</someType>
...
</someTypes>

看下面的代码。对于您的列表,您需要标记:

@XStreamImplicit(itemFieldName="someType")  
List<someType>List;

现在,根据您得到的内容,您可能需要创建一个自定义转换器。引用你改变有点像这样:

@XStreamImplicit(itemFieldName="someType")  @XStreamConverter(YourOwnConverter.class)  
List<SomeType> someTypeList;

然后创建一个知道如何取消/编码的转换器类 (YourOwnConverter):

public boolean canConvert(Class type) 
{
return type.equals(SomeType.class);
}

public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context)
{
SomeType mytype = (SomeType) source;
writer.addAttribute("position", mytype.getPosition());
writer.setValue(mytype.getId());
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context)
{
SomeType mytype = new SomeType();
String position = reader.getAttribute("position");
......
return mytype ;
}

以此为例: http://x-stream.github.io/converter-tutorial.html

关于java - XStream:如何在自定义转换器中编码/解码列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3804713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com