【发布时间】:2010-12-27 00:15:47
【问题描述】:
我正在试用Simple XML serializer。我对从 XML-> Java 反序列化更感兴趣。这是我作为单元测试的代码:
import java.io.StringReader;
import java.io.StringWriter;
import junit.framework.TestCase;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
public class SimpleTest extends TestCase {
public void testWriting() throws Exception {
StringWriter writer = new StringWriter();
Address address = new Address("1234 Main Street", "San Francisco", "CA");
Serializer serializer = new Persister();
serializer.write(address, writer);
System.out.println("Wrote: " + writer.getBuffer());
}
public void testReading() throws Exception {
String input = "<address street='1234 Main Street' city='San Francisco' state='CA'/>";
Serializer serializer = new Persister();
System.out.println("Read back: " + serializer.read(Address.class, new StringReader(input)));
}
}
@Root
class Address {
@Attribute(name="street")
private final String street;
@Attribute(name="city")
private final String city;
@Attribute(name="state")
private final String state;
public Address(@Attribute(name="street") String street, @Attribute(name="city") String city, @Attribute(name="state") String state) {
super();
this.street = street;
this.city = city;
this.state = state;
}
@Override
public String toString() {
return "Address [city=" + city + ", state=" + state + ", street=" + street + "]";
}
}
这可行,但是 Address 类中重复的 @Attribute 注释(在字段和构造函数参数处)看起来很难看。有没有办法:
- 从字段名中简单算出属性名吗?
- 有简单的忽略序列化,这样我就可以不用注释字段或构造函数参数了吗?
【问题讨论】:
-
如果您正在寻找简单的 XML->Java 反序列化并且不依赖于特定的包,这里有一个替代方案:sourceforge.net/projects/practicalxml(请注意,我没有将此作为答案,因为您似乎很高兴,这不是对待试图帮助您的人的好方法)
-
@kdgregory 谢谢,我没有绑定到特定的包——我会检查一下practicexml。请不要过于个人化地投票 - 所提供的建议远不能解决我的问题,而且很吵,IMO。
-
@kdgregory 再三考虑,我太高兴了。向大家道歉。
-
另一个非常好的库是 XStream。到目前为止,我已经能够用它做我需要的一切。 :-)
标签: java xml xml-serialization serialization