Serialization problem with Enums at Android

后端 未结 3 1406
南笙
南笙 2021-01-16 11:24

I\'m using XStream to serialize some objects to XML, and am facing a problem with Enums. The exception I get when I try to serialize the object: \"ObjectAccessException: inv

相关标签:
3条回答
  • 2021-01-16 11:49

    You can just register EnumConverter() from xstream package.

    xml.registerConverter(new EnumConverter());
    
    0 讨论(0)
  • 2021-01-16 11:52

    Pintac's answer still contains a bug. It still does not use the name() method, according to Java spec. After a thread at XStream mailing list, the bug was fixed in any release greater 1.3.1. Please see the thread "Enum on Android" at the mailing list.

    The fixed version:

       class FixedEnumSingleValueConverter extends EnumSingleValueConverter {
          FixedEnumSingleValueConverter(Class eType) {
            super(eType);
          }
    
          public toString(Object obj) {
            return Enum.class.cast(obj).name();
          }
        }
    
        xstream.registerConverter(new FixedEnumSingleValueConverter(Sample.class));
    

    It was from the developer of XStream.

    0 讨论(0)
  • 2021-01-16 11:56

    The only way i could find to get around this is to create a AbstractSingleValueConverter for enums and then register it with 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);
        }
    }
    

    Use

    XStream xml = new XStream();
    xml.registerConverter(new SingleValueEnumConverter([ENUM].class));
    
    0 讨论(0)
提交回复
热议问题