Простая сериализация Xml библиотеки без нового экземпляра класса

В моем проекте Java я пытаюсь использовать Simple Library (http://simple.sourceforge.net) для сериализации XML. Теперь мне нужно выполнить сериализацию из xml в существующий экземпляр моего класса. но эта библиотека всегда создает новый экземпляр. Например, у меня есть какой-то объект в памяти:

TObj myObject = new TObj();
myObject.field1 = 999;
myObject.field2 = 777;

Затем я получаю от сервера xml этого TObj, но только часть полей, например:

 <TObj field1="100">

Я хочу сериализовать этот xml в переменной myObject. и после этого результат должен быть:

myObject.field1 = 100;
myObject.field2 = 777;

Но простая библиотека всегда создает новый экземпляр класса TObj. Как мне добиться желаемого???

Спасибо


person Dmitry    schedule 10.05.2012    source источник


Ответы (2)


Используйте метод read() для Serializer, который принимает экземпляр вашего класса вместо .class.

http://simple.sourceforge.net/download/stream/doc/javadoc/org/simpleframework/xml/Serializer.html#read%28T,%20java.io.File%29

person Billy Bob Bain    schedule 10.05.2012
comment
Спасибо, это работает. Но, может быть, вы знаете, как добиться такого же поведения для полей объекта. например, поля моего объекта - это мои классы, и просто создайте их новый экземпляр... извините за мой плохой английский :) - person Dmitry; 10.05.2012

возможно, ваш класс TObj неправильно следует правилам сериализации и десериализации simplexml.

Я рекомендую вам использовать аннотации для определения вашего TObj, чтобы simplexml знал, как сериализовать ваш объект. Вот пример:

@Root(name = "Example")
public class SimpleExample {
    @Element(name = "Name", required = false)
    private String name;
}

Сделав это, вы можете создать новый экземпляр класса SimpleExample и сериализовать его следующим методом:

    public static <T> String marshal(T obj, Class<T> clazz) throws Exception {
    Strategy strategy = new AnnotationStrategy();
    Serializer serializer = new Persister(strategy, format);
    StringWriter out = new StringWriter();
    serializer.write(obj, out);
    return out.toString();
}

Вы получите что-то вроде:

<?xml version="1.0" ?>
<Example>
    <Name>value_of_this_field<Name>
<Example>
person Wang Zhong    schedule 11.12.2018