【问题标题】:how to serializee/deserialize in specific format如何以特定格式序列化/反序列化
【发布时间】:2023-03-04 03:55:01
【问题描述】:

我有一个对象图的 xml 序列化版本,并且想了解它的序列化方式,以便我可以添加具有兼容格式的类似内容。我不知道哪些库/选项允许这种格式

    public class MyRoot{
        public List<MyMember> members {get;set;}
        public List<Foo> foos {get;set;}
        public List<Bar> bars {get;set;}
    } 

我需要得到的xml是

<MyRoot>
 <members>...</members>
 <members>...</members>
 <members>...</members>

 <foos>...</foos>
 <foos>...</foos>
 <foos>...</foos>
 <foos>...</foos>

 <bars>...</bars>
 <bars>...</bars>
 <bars>...</bars>
 <bars>...</bars>
</MyRoot> 

【问题讨论】:

  • 您需要做的就是应用注释,然后序列化程序将处理其余的事情。请参阅:javax.xml.bind.annotation 中的 XMLRootElement 和 XMLElement。
  • 是或使用Jackson

标签: java .net xml serialization


【解决方案1】:

就像 Ryan 和 Jackson 的建议一样。尝试了 Ryan 的建议。

MyRoot 类:

@XmlRootElement(name = "MyRoot")
public class MyRoot {
    private List<MyMember> members;
    private List<Foo> foos;
    private List<Bar> bars;

    @XmlElement(name = "members")
    public List<MyMember> getMembers() {
        return members;
    }

    public void setMembers(List<MyMember> members) {
        this.members = members;
    }

    @XmlElement(name = "foos")
    public List<Foo> getFoos() {
        return foos;
    }

    public void setFoos(List<Foo> foos) {
        this.foos = foos;
    }

    @XmlElement(name = "bars")
    public List<Bar> getBars() {
        return bars;
    }

    public void setBars(List<Bar> bars) {
        this.bars = bars;
    }
}

Foo 类Bar 类MyMember 类 的代码相同:

@XmlRootElement
class Foo {
    private String content;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

使用 Main 方法的测试类:

public class Test {
    public static void main(String[] args) throws JAXBException {
        Bar bar = new Bar();
        bar.setContent("bar");
        Foo foo = new Foo();
        foo.setContent("");
        MyMember mymember = new MyMember();
        mymember.setContent("mymember");
        
        MyRoot root = new MyRoot();
        root.setBars(Arrays.asList(new Bar(), bar));
        root.setFoos(Arrays.asList(foo));
        root.setMembers(Arrays.asList(mymember));

        File file = new File("root.xml");
        JAXB.marshal(root, file);
    }
}

如果您使用 Eclipse,请按 F5 刷新 Explorer 以查看新文件 root.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MyRoot>
    <bars/>
    <bars>
        <content>bar</content>
    </bars>
    <foos>
        <content></content>
    </foos>
    <members>
        <content>mymember</content>
    </members>
</MyRoot>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 2017-08-07
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2013-08-25
    相关资源
    最近更新 更多