【发布时间】:2015-08-30 11:46:24
【问题描述】:
我成功地将包含HashMap<String, String> 的Base 类与NamedMapConverter 序列化。我的要求发生了变化,我需要将 HashMap 更改为扩展 HashMap<String, String> 的自定义 StringDictionary 类。
但是在使用StringDictionary 之后,我的序列化被破坏了。有没有办法在不编写自定义转换器的情况下配置 XStream 和/或 NamedMapConverter 以保留所需的 xml 输出?
在 Android 上使用 XStream 1.4.7。
必需的xml 输出:
<base>
<values>
<val key="123">111</val>
<val key="abc">aaa</val>
</values>
</base>
Base 类与 HashMap 和 XStream 配置产生上述输出
public class Base
{
public Map<String, String> values = new HashMap<>();
}
Base base = new Base();
base.values.put("abc", "aaa");
base.values.put("123", "111");
XStream xs = new XStream();
xs.alias("base", Base.class);
NamedMapConverter c = new NamedMapConverter(xs.getMapper(), "val", "key", String.class, null, String.class, true, false, xs.getConverterLookup());
xs.registerConverter(c);
String s = xs.toXML(base);
使用修改后的Base 类
public class Base
{
public Map<String, String> values = new StringDictionary();
}
产生以下不正确的xml 输出:
<base>
<values class="com.test.StringDictionary" serialization="custom">
<unserializable-parents/>
<map>
<default>
<loadFactor>0.75</loadFactor>
</default>
<int>4</int>
<int>2</int>
<string>123</string>
<string>111</string>
<string>abc</string>
<string>aaa</string>
</map>
</values>
</base>
【问题讨论】: