У меня есть класс, который нужно сериализовать
public class Abc
{
private long age;
private JaxBElement<Foo> fooWrapper;
// other properties
}
Ожидаемый вывод JSON равен
{
"age": 24,
"my_own_key": "my_own_value" // the key should not be "fooWrapper"
Ограничение состоит в том, что исходный класс Ab c не может быть изменен, поскольку он генерируется из xj c, и я пока не хочу исследовать пользовательский класс с использованием привязок.
Я пробовал собственные сериализаторы, модификаторы bean et c. для JaxBElement и все они позволяют мне контролировать сериализацию. Но они работают только на VALUE собственности. Они не позволяют мне что-то менять на уровне " KEY -VALUE". Это суть вопроса. Ключ уже выписан для свойства до вызова настраиваемого сериализатора для управления значением.
Например, мой настраиваемый сериализатор вызывается только после того, как система Джексона выпустила ключ
"fooWrapper": // now for the value part, let me invoke the custom serializer
Таким образом, вывод JSON всегда содержит ключ "fooWrapper".
{ "fooWrapper": { "any-key": "any-value" } }
// the fooWrapper is already emitted out. That is what needs to be controlled.
Я прошу контролировать сериализацию на более высоком уровне, чтобы можно было контролировать и ключ, и значение. Поэтому, когда класс Ab c сериализуется, свойство fooWrapper вообще не должно быть записано как ключ, и должен вызываться какой-либо пользовательский сериализатор.
Другое ограничение заключается в том, что существует несколько классов, таких как Ab c который может иметь такой JaxBElement. Это не известно заранее. Таким образом, должен быть универсальный c способ присоединения пользовательского сериализатора.
Псевдопросмотр действительно, что мы можем присоединить пользовательский сериализатор к любому классу, у которого есть свойство, которое соответствует шаблону так, чтобы Сериализатор может управлять именем записанного свойства (или всего большого двоичного объекта).
Кроме того, проблема сама по себе не задается c для JaxBElement. Это может быть любая собственность. Проблема скорее в контролируемой сериализации, ВКЛЮЧАЯ записываемый ключ.