5 に答える
そのコードを読んだところ、クラスが ではないmapper.defaultImplementationOf(fieldType)
場合、クラス属性名が null でない限り、デフォルトのクラス属性が追加されます。
したがって、これを設定すると、 class="Something " 属性を削除できます
xstream.aliasSystemAttribute(null, "class");
実際、問題は本来あるべきほど明確に表現されていません。私の推測では、非標準のコレクションを使用しているか、XStream が実際のクラスを格納する必要があるインターフェイス タイプのフィールドを使用していると思われます。
2 番目のケースでは、エイリアスを使用できます。
xstream.alias("field name", Interface.class, ActualClassToUse.class);
詳細については、 http://markmail.org/message/gds63p3dnhpy3ef2を参照してください。
この属性は、少なくとも、どのクラスを使用するかが明らかでない場合に表示されます。インターフェイスの使用方法は一例です。そのような状況では、次を試すことができます:
xStream.addDefaultImplementation(YourDefaultImplementation.class, YourInterface.class);
.
クラス属性を別のものでエイリアスするのではなく、この種のものを使用して完全に削除します。
private String generateResponse(final XStream xStream)
{
StringWriter writer = new StringWriter();
xStream.marshal(this, new PrettyPrintWriter(writer) {
@Override
public void addAttribute(final String key, final String value)
{
if (!key.equals("class"))
{
super.addAttribute(key, value);
}
}
});
return writer.toString();
}
出力例を教えてください。これは通常、コレクションを使用しているときに発生すると思います。出力を見ずに、私の最善の推測は、エイリアスを登録する必要があるということです:
xstream.alias("blog", Blog.class);
詳細については、http: //x-stream.github.io/alias-tutorial.htmlを参照してください。繰り返しますが、サンプル出力を貼り付けます。