- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
XStream 拒绝在下面的输出 xml 中添加“resultState”字段作为属性(请参见屏幕截图),但它对“order”和“name”字段正确地执行了此操作。知道为什么吗?
代码:
xstream.useAttributeFor(Result.class, "name");
xstream.useAttributeFor(Result.class, "order");
xstream.useAttributeFor(Result.class, "resultState");
包含: - Result.class,ScenarioResult、TestCaseResult、PhaseResult 和 TaskResult 的父类,如下面的 xml 输出所示。 - “resultState”,Result.class 的字段,类型为 ResultState(它是枚举类型)
XML 输出(请参阅随附的屏幕截图,因为纯 xml 文本在帖子中无法正确显示):
最佳答案
问题在于 ResultState 类是枚举类型,并且 Xstream 不知道如何在没有一点帮助的情况下将枚举作为属性传递。解决方案是为枚举创建一个转换器类并将其注册到 xstream 实例,如本 SO 帖子中所述: Serialization problem with Enums at Android
另请查看这篇文章,了解使用泛型的转换器实现: enums as attributes
我的解决方案结合了这两篇文章中的位,如下所示(请注意,我将转换器设为私有(private)静态,但如果放入它自己的类文件中,它的工作原理是相同的):
private static class EnumSingleValueConverter<T extends Enum<T>>
extends AbstractSingleValueConverter {
private Class<T> enumType;
public static <V extends Enum<V>> SingleValueConverter
create(Class<V> enumClass) {
return new EnumSingleValueConverter<V>(enumClass);
}
private EnumSingleValueConverter(Class<T> newEnumType) {
this.enumType = newEnumType;
}
public boolean canConvert(Class type) {
return type == enumType;
}
public Object fromString(String str) {
return Enum.valueOf(enumType, str);
}
public String toString(Object obj) {
return obj.toString();
}
}
除了我们为注册位添加一行之外,其余代码不变:
xstream.registerConverter(EnumSingleValueConverter.create(ResultState.class));
xstream.useAttributeFor(Result.class, "name");
xstream.useAttributeFor(Result.class, "order");
xstream.useAttributeFor(Result.class, "resultState");
例如,屏幕截图中的第 11 行现在如下所示:
<TaskResult name="CheckValue" resultState="FAILURE" order="0"/>
关于java - XStream useAttributeFor 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21779004/
XStream 拒绝在下面的输出 xml 中添加“resultState”字段作为属性(请参见屏幕截图),但它对“order”和“name”字段正确地执行了此操作。知道为什么吗? 代码: xstrea
我是一名优秀的程序员,十分优秀!