0

JSON のようなオブジェクトがあり、これにはバイナリ値もいくつかあります。byte[]binary( ) データをシリアライズしたくありません。

のカスタムシリアライザーを追加しようとしましたbyte[]。しかし、うまくいきませんでした。

1を試してください:

    public class ByteArraySerialiser extends SerializerBase<Byte[]> {

    protected ByteArraySerialiser() {
        super(Byte[].class, false);
    }

    @Override
    public void serialize(Byte[] arg0, JsonGenerator arg1,
            SerializerProvider arg2) throws IOException,
            JsonGenerationException {
        arg1.writeString("");
    }

}

2 を試してください:

    public class ByteArraySerialiser extends SerializerBase<Byte> {

    protected ByteArraySerialiser() {
        super(Byte.class, false);
    }

    @Override
    public void serialize(Byte arg0, JsonGenerator arg1,
            SerializerProvider arg2) throws IOException,
            JsonGenerationException {
        arg1.writeString("");
    }

}

ただし、どちらもデフォルトのシリアライザーをオーバーライドできません。

注釈を使用できませんでしたMap<Object, Object>

ありがとう。

4

1 に答える 1

1

ゲッターまたはフィールド自体で JsonIgnore アノテーションを使用してみましたか? そのために MixIn を使用することもできます。例 ( oVirtオープン ソースから引用):

public abstract class JsonNGuidMixIn extends NGuid {

    /**
     * Tells Jackson that the constructor with the {@link String} argument is to be used to deserialize the entity,
     * using the "uuid" property as the argument.
     *
     * @param candidate
     */
    @JsonCreator
    public JsonNGuidMixIn(@JsonProperty("uuid") String candidate) {
        super(candidate);
    }

    /**
     * Ignore this method since Jackson will try to recursively dereference it and fail to serialize.
     */
    @JsonIgnore
    @Override
    public abstract Guid getValue();
}

そして使い方はJSonObjectSerializerにあります(ここにその一部をコピペします)

@Override
    public String serialize(Serializable payload) throws SerializationExeption {
        ObjectMapper mapper = new ObjectMapper();
        mapper.getSerializationConfig().addMixInAnnotations(NGuid.class, JsonNGuidMixIn.class);
        mapper.getSerializationConfig().addMixInAnnotations(Guid.class, JsonNGuidMixIn.class);
        mapper.configure(Feature.INDENT_OUTPUT, true);
        mapper.enableDefaultTyping();
        return writeJsonAsString(payload, mapper);
    }
于 2012-06-22T07:02:29.150 に答える