【问题标题】:Simple Library Xml serialization without new instance of class没有类的新实例的简单库 Xml 序列化
【发布时间】:2012-05-10 11:56:22
【问题描述】:

在我的 Java 项目中,我尝试使用 Simple Library (http://simple.sourceforge.net) 进行 XML 序列化。 现在我需要从 xml 序列化到我的类的现有实例中。但是这个库总是创建新实例。 例如我在内存中有一些对象:

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

然后我从服务器接收到这个 TObj 的 xml 但只有部分字段,例如:

 <TObj field1="100">

我想在 myObject 变量中序列化这个 xml。之后的结果应该是:

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

但是简单的库总是创建 TObj 类的新实例。 我怎样才能达到预期的效果???

谢谢

【问题讨论】:

标签: java serialization simple-framework


【解决方案1】:

Serializer 上使用read() 方法,该方法接受您的类的实例而不是.class。

http://simple.sourceforge.net/download/stream/doc/javadoc/org/simpleframework/xml/Serializer.html#read(T, java.io.File)

【讨论】:

  • 谢谢它是炒锅。但是您可能知道如何为对象的字段实现相同的行为。例如我的对象的字段是我的类和简单的创建它们的新实例......对不起我的英语不好:)
【解决方案2】:

也许您的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多