13
4

5 に答える 5

20

そのコードを読んだところ、クラスが ではないmapper.defaultImplementationOf(fieldType)場合、クラス属性名が null でない限り、デフォルトのクラス属性が追加されます。

したがって、これを設定すると、 class="Something " 属性を削除できます

 xstream.aliasSystemAttribute(null, "class");
于 2011-04-24T16:01:57.297 に答える
14

実際、問題は本来あるべきほど明確に表現されていません。私の推測では、非標準のコレクションを使用しているか、XStream が実際のクラスを格納する必要があるインターフェイス タイプのフィールドを使用していると思われます。

2 番目のケースでは、エイリアスを使用できます。

xstream.alias("field name", Interface.class, ActualClassToUse.class);

詳細については、 http://markmail.org/message/gds63p3dnhpy3ef2を参照してください。

于 2010-02-23T23:23:12.787 に答える
2

この属性は、少なくとも、どのクラスを使用するかが明らかでない場合に表示されます。インターフェイスの使用方法は一例です。そのような状況では、次を試すことができます:

xStream.addDefaultImplementation(YourDefaultImplementation.class, YourInterface.class);

.

于 2015-05-06T00:41:14.693 に答える
2

クラス属性を別のものでエイリアスするのではなく、この種のものを使用して完全に削除します。

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();
}
于 2010-04-20T13:25:34.460 に答える
1

出力例を教えてください。これは通常、コレクションを使用しているときに発生すると思います。出力を見ずに、私の最善の推測は、エイリアスを登録する必要があるということです:

xstream.alias("blog", Blog.class);

詳細については、http: //x-stream.github.io/alias-tutorial.htmlを参照してください。繰り返しますが、サンプル出力を貼り付けます。

于 2010-01-06T19:41:23.760 に答える