android - Android 中枚举的序列化问题

标签 android enums xstream

我正在使用 XStream 将一些对象序列化为 XML,但遇到了枚举问题。当我尝试序列化对象时出现异常:“ObjectAccessException:无效的最终字段 java.lang.Enum.name”。

显然,这是 android 中反射 API 实现的一个问题:它没有正确处理最终字段。这个问题实际上存在于官方 Sun (Oracle) JDK 的以往实现中。

你能确认/反驳这是 Android 的问题吗?你能建议在这种情况下可以使用的任何其他序列化 API 吗?

最佳答案

我能找到解决这个问题的唯一方法是为枚举创建一个 AbstractSingleValueConverter,然后将其注册到 xstream。

public class SingleValueEnumConverter extends AbstractSingleValueConverter
{
    private final Class enumType;

    public SingleValueEnumConverter(Class type)
    {
        this.enumType = type;
    }

    public boolean canConvert(Class c)
    {
        return c.equals(enumType);
    }

    public Object fromString(String value)
    {
        return Enum.valueOf(enumType, value);
    }
}

使用

XStream xml = new XStream();
xml.registerConverter(new SingleValueEnumConverter([ENUM].class));

关于android - Android 中枚举的序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3533894/

相关文章:

android - ListFragment onListItemClick 不再适用于 Android 4.1 Jelly Bean

python - 为 Enum 的子类重载 __init__()

c# - 枚举且没有值为 '0' 的字段

java - JAXB 代码注入(inject)枚举类

java - 如何使用 XStream 为数据类型别名?

: is FrameLayout really useless? ArrayAdapter ListView的Android布局优化

android - 如何在 android 中使用 Dagger 对 kotlin 文件进行 UI 测试?

java - 如何使用 xstream 将 xml 字符串附加到现有的 xml 文件

java - 解析 XML 时拦截 Xstream

java - 如何确定已弃用的权限?