加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XStream快速起步 简单方便实现序列化(XML和JSON)

发布时间:2020-12-15 23:46:18 所属栏目:百科 来源:网络整理
导读:其实XStream和JAXB在一些观念上是很相似的 但是JAXB作为Java EE的一个规范 是非常正式的 且和其他很多规范有联系 是一种标准的实现 这边简单说说实现方式(博客里有文介绍使用): 1.一个实体类,使用@XmlRootElement表示一下类(最简单的) 2.建立一个ObjectFacto

其实XStream和JAXB在一些观念上是很相似的

但是JAXB作为Java EE的一个规范 是非常正式的 且和其他很多规范有联系 是一种标准的实现

这边简单说说实现方式(博客里有文介绍使用):

1.一个实体类,使用@XmlRootElement表示一下类(最简单的)

2.建立一个ObjectFactory用来产生这个实体类

3.使用JAXBContext 然后产生Marshaller(对象-->xml)或者UnMarshaller(xml-->对象)

而XStream使用起来更为简单

1.首先从XStream官网下载XStream

http://xstream.codehaus.org/download.html

2.下载后解压 将lib下的jar添加入项目就可以了

如下:



然后就可以编写代码了

为了方便 直接使用XStream的annotation:

3.实体类 Person:

Java代码
  1. packageorg.cc.vo;
  2. importjava.util.List;
  3. importcom.thoughtworks.xstream.annotations.XStreamAlias;
  4. importcom.thoughtworks.xstream.annotations.XStreamAsAttribute;
  5. importcom.thoughtworks.xstream.annotations.XStreamImplicit;
  6. importcom.thoughtworks.xstream.annotations.XStreamOmitField;
  7. @XStreamAlias("Person")
  8. publicclassPerson{
  9. @XStreamAlias("name")
  10. @XStreamAsAttribute
  11. privateStringname;
  12. @XStreamAlias("age")
  13. privateintage;
  14. @XStreamAlias("sex")
  15. booleansex;
  16. @XStreamImplicit(itemFieldName="favor")
  17. privateList<String>favor;
  18. @XStreamOmitField
  19. inttempid;
  20. publicStringgetName(){
  21. returnname;
  22. }
  23. voidsetName(Stringname){
  24. this.name=name;
  25. intgetAge(){
  26. returnage;
  27. voidsetAge(intage){
  28. this.age=age;
  29. booleanisSex(){
  30. returnsex;
  31. voidsetSex(booleansex){
  32. this.sex=sex;
  33. publicList<String>getFavor(){
  34. returnfavor;
  35. voidsetFavor(List<String>favor){
  36. this.favor=favor;
  37. intgetTempid(){
  38. returntempid;
  39. voidsetTempid(inttempid){
  40. this.tempid=tempid;
  41. @Override
  42. publicStringtoString(){
  43. return"Person[name="+name+",age="+age+",sex="+sex
  44. +",favor="+favor+",tempid="+tempid+"]";
  45. }

@XStreamAlias(value)是别名 可以用在类名和属性名上修改显示的xml中的标签

@XStreamAsAttribute 把属性作为xml中的属性 而不是子元素

@XStreamImplicit(itemFieldName="favor") 还有一个keyFieldName的属性 这个是用来改写List和Map的显示 的

@XStreamOmitField 此标记的属性不会序列化

4.接下去只有一步,没有JAXB的建立ObjectFactory那一部,实现起来非常简洁直观:

importjava.util.ArrayList;
  • importcom.thoughtworks.xstream.XStream;
  • importcom.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
  • classMain{
  • staticvoidmain(String[]args){
  • XStreamx=newXStream();
  • //XStreamx=newXStream(newJettisonMappedXmlDriver());
  • x.processAnnotations(Person.class);
  • Personp=newPerson();
  • p.setAge(30);
  • List<String>fa=newArrayList<String>();
  • fa.add("游戏");
  • fa.add("上网");
  • p.setFavor(fa);
  • p.setName("cc");
  • Stringinfo=x.toXML(p);
  • System.out.println(info);
  • Personp2=(Person)x.fromXML(info);
  • System.out.println(p2);
  • 输出:

    Xml代码
      <Personname="cc">
    1. age>30</sex>falsefavor>游戏>上网Person Person[name=cc,age=30,sex=false,favor=[游戏,上网],tempid=0]

    注意了以上代码注释掉的那块打开 并把没有参数的构造方法的XStream那一段注释掉产生的就是JSON(换了一个引擎)

    产生内容如下:

    Html代码 {"Person":{"@name":"cc","age":30,"sex":false,"favor":["游戏","上网"]}}
  • tempid=0]
  • (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读