java - 简单的 XML 反序列化

标签 java xml xml-serialization serialization

我正在试用 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 注释(在字段和构造函数参数处)看起来很难看。有什么方法可以:

  • 能简单的从字段名中找出属性名吗?
  • 有简单的忽略序列化,这样我就可以不用注释字段或构造函数参数了吗?

最佳答案

我认为您不需要所有重复和额外注释的属性。如果名称与对象属性相同,则默认使用。

因此您可以将其声明为:

@Root
class Address {
    @Attribute
    private final String street;

    @Attribute
    private final String city;

    @Attribute
    private final String state;

    public Address(String street, String city, String state) {
        super();
        this.street = street;
        this.city = city;
       this.state = state;
   }

   @Override
   public String toString() {
      return "Address [city=" + city + ", state=" + state + ", street=" + street + "]";
   }   
}

关于java - 简单的 XML 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1910694/

相关文章:

java - HashMap 难点

node.js - 如何在node js中使用xpath获取属性值

c# - 有什么方法可以阻止在编译时调用的方法吗?

java - 使用 KeyNavigatorBehavior 时哪些键用于移动?我该如何设置它们?

java - 一旦我执行了一项功能,如何让控制台菜单重复,以便我可以在不关闭程序的情况下执行另一项功能?

java - 如何向 Gradle 添加新的源集?

php - 读取 Soap Response XML 并插入到 mysql 中

使用 XSLT 1 进行 XML 转换

java - Xstream 映射 XML 的 "choice"元素

java - Eclipse 中的 "import java.beans.XMLEncoder"问题