Java设置XStream反序列化规则
我有一个类,它带有codeBasedJava设置XStream反序列化规则,java,xml,serialization,xstream,Java,Xml,Serialization,Xstream,我有一个类,它带有codeBasedenum字段。我有这个类的xml序列化对象。但是,当我尝试使用XStream反序列化此xml时,我收到: com.thoughtworks.xstream.converters.ConversionException:无枚举常量com.functest.util.TriState.0:无枚举常量com.functest.util.TriState.0 阶级 xmlParameters字符串 <Params> <clientCode&g
enum
字段。我有这个类的xml序列化对象。但是,当我尝试使用XStream
反序列化此xml时,我收到:
com.thoughtworks.xstream.converters.ConversionException:无枚举常量com.functest.util.TriState.0:无枚举常量com.functest.util.TriState.0
阶级
xmlParameters字符串
<Params>
<clientCode>1516001</clientCode>
<triState>0</triState>
</Params>
我尝试像这样反序列化xml:
XStream xStream = new XStream();
xStream.alias("triState", TriState.class);
Params p = (Params) xStream.fromXML(xmlParameters);
如何设置反序列化规则以从xml获取值并调用枚举方法
fromCode(0)
?将fromCode转换为静态方法:
public enum TriState {
YES(1),NO(0),UNDEFINED(-1);
int code;
private TriState(int code) {
this.code = code;
}
public static TriState fromCode(int code) {
if (code == 1)
return YES;
if (code == 0)
return NO;
return UNDEFINED;
}
}
并定义使用静态方法将代码转换为有效枚举的转换器:
public class TriStateConverter implements Converter {
public boolean canConvert(Class type) {
return TriState.class==type;
}
public void marshal(Object o, HierarchicalStreamWriter writer, MarshallingContext mc) {
writer.setValue(Integer.toString(((TriState)o).code));
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext uc) {
return TriState.fromCode(Integer.parseInt(reader.getValue()));
}
}
我还没有试过这个代码,但应该可以用
public enum TriState {
YES(1),NO(0),UNDEFINED(-1);
int code;
private TriState(int code) {
this.code = code;
}
public static TriState fromCode(int code) {
if (code == 1)
return YES;
if (code == 0)
return NO;
return UNDEFINED;
}
}
public class TriStateConverter implements Converter {
public boolean canConvert(Class type) {
return TriState.class==type;
}
public void marshal(Object o, HierarchicalStreamWriter writer, MarshallingContext mc) {
writer.setValue(Integer.toString(((TriState)o).code));
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext uc) {
return TriState.fromCode(Integer.parseInt(reader.getValue()));
}
}