Как избежать информации о типе для списка после сериализации в Джексоне - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть класс на C #, как показано ниже,

class Person
{
  List<String> hobbies;
}

Когда я конвертирую его в класс Java с помощью Jaxb, он выглядит как

class Person
{
  @XmlElement(name = "hobbies")
  ArrayOfString hobbies;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ArrayOfString", propOrder = {
    "string"
})
public class ArrayOfString {

    @XmlElement(nillable = true)
    protected List<String> string;
}

Все хорошо до сих пор, но сейчас, когда я пытаюсь преобразовать этот объект в Json, используя Jackson Objectmapper, вот так:

ObjectMapper mapper = new ObjectMapper();
ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
String jsonString= ow.writeValueAsString(Person);

Я получаю вывод json, как показано ниже,

{ 
     "hobbies" : { "string" : [ "reading","writing"] }
}

Теперь мне нужно, чтобы json выглядел как показано ниже без строкового ключевого слова.

{ 
     "hobbies" : [ "reading","writing"] 
}

К сожалению, я не могу изменить сгенерированный c # xsd. Любые решения?

1 Ответ

0 голосов
/ 05 апреля 2019

Не уверен насчет вашей части JAXB, но если вы определили свои классы bean-компонентов как:

class Person
{
    private ArrayOfString hobbies;

    public ArrayOfString getHobbies() {
        return hobbies;
    }

    public void setHobbies(ArrayOfString hobbies) {
        this.hobbies = hobbies;
    }
}

class ArrayOfString {

    @JsonValue
    protected List<String> string;

    public List<String> getString() {
        return string;
    }

    public void setString(List<String> string) {
        this.string = string;
    }
}

Обратите внимание на аннотацию @JsonValue на поле protected List<String> string.
Теперь вы получите ожидаемый результат.

public static void main(String[] args) throws JsonProcessingException {
    Person person = new Person();
    person.hobbies = new ArrayOfString();
    person.hobbies.string = Arrays.asList("reading","writing");
    ObjectMapper mapper = new ObjectMapper();
    ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
    String jsonString= ow.writeValueAsString(person);
    System.out.println(jsonString);
}

выход

{
  "hobbies" : [ "reading", "writing" ]
}

Примечание: Вы по-прежнему можете добавлять аннотации JAXB к компонентам без побочных эффектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...