我正在使用XStream来序列化和反序列化对象.例如,名为rating的类定义如下:
Public Class rating { String id; int score; int confidence; // constructors here... }
但是,在此类中,变量置信度是可选的.
因此,当置信度值已知(非0)时,rating对象的XML表示应如下所示:
<rating> <id>0123</id> <score>5</score> <confidence>10</confidence> </rating>
但是,当置信度未知(默认值为0)时,置信度
应该从XML表示中省略属性:
<rating> <id>0123</id> <score>5</score> </rating>
谁能告诉我如何使用XStream有条件地序列化字段?
解决方法
一种选择是写一个
converter.
这是我很快为你写的:
import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; public class ratingConverter implements Converter { @Override public boolean canConvert(Class clazz) { return clazz.equals(rating.class); } @Override public void marshal(Object value,HierarchicalStreamWriter writer,MarshallingContext context) { rating rating = (rating) value; // Write id writer.startNode("id"); writer.setValue(rating.getId()); writer.endNode(); // Write score writer.startNode("score"); writer.setValue(Integer.toString(rating.getscore())); writer.endNode(); // Write confidence if(rating.getConfidence() != 0) { writer.startNode("confidence"); writer.setValue(Integer.toString(rating.getConfidence())); writer.endNode(); } } @Override public Object unmarshal(HierarchicalStreamReader arg0,UnmarshallingContext arg1) { return null; } }
剩下的就是注册转换器,并在rating类中提供访问器方法(即getId,getscore,getConfidence).
注意:您的另一个选择是适当的omit the field.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。