




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Xstream操作Xml与Json1. Xstream介绍1(1) Xstream介绍1(2) Xstream的简单例子12. Xstream的基本使用2(1) Xstream序列化XML2(2) Xstream序列化Json33. Xstream序列化重命名3(1) 为包重命名:Xstream.aliasPackage()方法3(2) 为类重命名:Xstream.alias()方法3(3) 为字段重命名:Xstream.aliasField()方法4(4) 省略集合根节点:Xstream.addImplicitCollection()方法4(5) 把字段节点设置成属性:Xstream.useAttributeFor()方法5(6) 隐藏字段:xstream.omitField()方法54. Xstream注解的使用6(1) 设置Xstream应用注解6(2) 重命名注解:XStreamAlias()6(3) 省略集合根节点:XStreamImplicit7(4) 把字段节点设置成属性:XStreamAsAttribute7(5) 隐藏字段:XStreamOmitField8(6) 设置转换器:XStreamConverter()85. Xstream自定义的转换器8(1) Xstream自带的转换器8(2) 使用自定义的转换器8(3) 常用的转换器接口与抽象类106. Xstream对象流的使用10(1) Xstream对象输出流10(2) Xstream对象输出流117. Xstream持久化API11(1) 保存JavaBean对象11(2) 读取并删除JavaBean对象128. Xstream操作Json12(1) Xstream序列化Json的重命名12(2) 去掉序列化Json的根节点13(3) Json的解析器区别14作者:李志伟时间:2014-06-301. Xstream介绍(1) Xstream介绍Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列化,使用非常方便。(2) Xstream的简单例子class Person/JavaBean实体类private String name;private int age;public Person(String name,int age)=name;this.age=age;Overridepublic String toString()return Person name= + name + , age= + age + ;public class Testpublic static void main(String args)Person bean=new Person(张三,19);XStream xstream = new XStream();/XML序列化String xml = xstream.toXML(bean);System.out.println(xml);/XML反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);xstream = new XStream(new JettisonMappedXmlDriver();xstream.setMode(XStream.NO_REFERENCES);/Json序列化String json=xstream.toXML(bean);System.out.println(json);/Json反序列bean=(Person)xstream.fromXML(json);System.out.println(bean);程序运行结果: 张三 19Person name=张三, age=19test.Person:name:张三,age:19Person name=张三, age=19注意:Xstream序列化XML时需要引用的jar包:xstream-version.jar、xpp3-version.jar、xmlpull-version.jar。Xstream序列化Json需要引用的jar包:jettison-version.jar。使用Xstream序列化时,对JavaBean没有任何限制。JavaBean的字段可以是私有的,也可以没有getter或setter方法,还可以没有默认的构造函数。2. Xstream的基本使用(1) Xstream序列化XMLXstream序列化XML时可以允许用户使用不同的XML解析器,用户可以使用一个标准的JAXP DOM解析器或自Java6集成StAX解析器。这样用户就不需要依赖xpp3-version.jar。Xstream序列化XML时,也可以对XML节点重命名。public class Testpublic static void main(String args)Person bean=new Person(张三,19);/XStream xstream = new XStream();/需要XPP3库/XStream xstream = new XStream(new DomDriver();/不需要XPP3库XStream xstream = new XStream(new StaxDriver();/不需要XPP3库开始使用Java6 xstream.alias(人,Person.class);/为类名节点重命名/XML序列化String xml = xstream.toXML(bean);System.out.println(xml);/XML反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);程序运行结果:张三19Person name=张三, age=19(2) Xstream序列化JsonXstream序列化Json与序列化XML类似,例如:public class Testpublic static void main(String args)Person bean=new Person(张三,19);XStream xstream = new XStream(new JettisonMappedXmlDriver();/设置Json解析器 xstream.setMode(XStream.NO_REFERENCES);/设置reference模型,不引用xstream.alias(人,Person.class);/为类名节点重命名/Json序列化String xml = xstream.toXML(bean);System.out.println(xml);/Json反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);程序运行结果:人:name:张三,age:19Person name=张三, age=193. Xstream序列化重命名(1) 为包重命名:Xstream.aliasPackage()方法public class Testpublic static void main(String args)Person bean=new Person(张三,19);XStream xstream = new XStream();xstream.aliasPackage(com.lzw, test);/为包名称重命名/序列化String xml = xstream.toXML(bean);System.out.println(xml);/反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);程序运行结果: 张三 19Person name=张三, age=19(2) 为类重命名:Xstream.alias()方法public class Testpublic static void main(String args)Person bean=new Person(张三,19);XStream xstream = new XStream();xstream.alias(人, Person.class);/为类名节点重命名/序列化String xml = xstream.toXML(bean);System.out.println(xml);/反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);程序运行结果: 张三 19Person name=张三, age=19(3) 为字段重命名:Xstream.aliasField()方法public class Testpublic static void main(String args)Person bean=new Person(张三,19);XStream xstream = new XStream();xstream.aliasField(姓名, Person.class,name);/为类的字段节点重命名xstream.aliasField(年龄, Person.class,age);/为类的字段节点重命名/序列化String xml = xstream.toXML(bean);System.out.println(xml);/反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);程序运行结果: 张三 19Person name=张三, age=19(4) 省略集合根节点:Xstream.addImplicitCollection()方法class Personprivate String name;private int age;private List friends;public Person(String name, int age, String. friends) = name;this.age = age;this.friends = Arrays.asList(friends);Overridepublic String toString()return Person name= + name + , age= + age + , friends= + friends + ;public class Testpublic static void main(String args)Person bean =new Person(张三,19,李四,王五,赵六);XStream xstream = new XStream();xstream.addImplicitCollection(Person.class, friends);/省略集合根节点/序列化String xml = xstream.toXML(bean);System.out.println(xml);/反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);程序运行结果: 张三 19 李四 王五 赵六Person name=张三, age=19, friends=李四, 王五, 赵六(5) 把字段节点设置成属性:Xstream.useAttributeFor()方法public class Testpublic static void main(String args)Person bean =new Person(张三,19,李四,王五,赵六);XStream xstream = new XStream();xstream.useAttributeFor(Person.class, name);/把字段节点设置成属性/序列化String xml = xstream.toXML(bean);System.out.println(xml);/反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);程序运行结果: 19 李四 王五 赵六 Person name=张三, age=19, friends=李四, 王五, 赵六(6) 隐藏字段:xstream.omitField()方法public class Testpublic static void main(String args)Person bean =new Person(张三,19,李四,王五,赵六);XStream xstream = new XStream();xstream.omitField(Person.class, friends);/把字段节点隐藏/序列化String xml = xstream.toXML(bean);System.out.println(xml);/反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);程序运行结果: 张三 19Person name=张三, age=19, friends=null4. Xstream注解的使用(1) 设置Xstream应用注解使用Xstream注解前需要对Xstream进行配置,可以使用两种方式:应用某个JavaBean类的注解或自动使用JavaBean类的注解。代码如下:XStream xstream = new XStream();cessAnnotations(Person.class);/应用Person类的注解xstream.autodetectAnnotations(true);/自动检测注解(2) 重命名注解:XStreamAlias()XStreamAlias(人)class PersonXStreamAlias(姓名)private String name;XStreamAlias(年龄)private int age;XStreamAlias(朋友)private List friends;public Person(String name, int age, String. friends) = name;this.age = age;this.friends = Arrays.asList(friends);Overridepublic String toString()return Person name= + name + , age= + age + , friends= + friends + ;程序运行结果: 张三 19 李四 王五 赵六 Person name=张三, age=19, friends=李四, 王五, 赵六(3) 省略集合根节点:XStreamImplicitclass Personprivate String name;private int age;/XStreamImplicit/只隐藏集合根节点XStreamImplicit(itemFieldName=朋友)/设置重复的节点名,可能会导致无法反序列化private List friends;public Person(String name, int age, String. friends) = name;this.age = age;this.friends = Arrays.asList(friends);Overridepublic String toString()return Person name= + name + , age= + age + , friends= + friends + ;程序运行结果: 张三 19 李四 王五 赵六Person name=张三, age=19, friends=李四, 王五, 赵六(4) 把字段节点设置成属性:XStreamAsAttributeclass PersonXStreamAsAttributeprivate String name;XStreamAsAttributeprivate int age;private List friends;public Person(String name, int age, String. friends) = name;this.age = age;this.friends = Arrays.asList(friends);Overridepublic String toString()return Person name= + name + , age= + age + , friends= + friends + ;程序运行结果: 李四 王五 赵六 Person name=张三, age=19, friends=李四, 王五, 赵六(5) 隐藏字段:XStreamOmitFieldclass Personprivate String name;private int age;XStreamOmitFieldprivate List friends;public Person(String name, int age, String. friends) = name;this.age = age;this.friends = Arrays.asList(friends);Overridepublic String toString()return Person name= + name + , age= + age + , friends= + friends + ;程序运行结果: 张三 19Person name=张三, age=19, friends=null(6) 设置转换器:XStreamConverter()class Personprivate String name;private int age; XStreamConverter(value=BooleanConverter.class,booleans=false,strings=男,女)private boolean sex;public Person(String name, int age, boolean sex) = name;this.age = age;this.sex=sex;Overridepublic String toString()return Person name= + name + , age= + age + , sex= + sex + ;程序运行结果: 张三 19 男Person name=张三, age=19, sex=true5. Xstream自定义的转换器(1) Xstream自带的转换器Xstream内部有许多转换器,用于JavaBean对象到XML或Json之间的转换。这些转换器的详细信息网址:/converters.html(2) 使用自定义的转换器class Personprivate String name;private int age;public Person(String name, int age) = name;this.age = age;public String getName()return name;public void setName(String name) = name;public int getAge()return age;public void setAge(int age)this.age = age;Overridepublic String toString()return Person name= + name + , age= + age + ;public class PersonConverter implements Converter Override/定义转换器能转换的JavaBean类型public boolean canConvert(Class type)return type.equals(Person.class);Override/把对象序列化成XML或Jsonpublic void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context)Person person = (Person) value; writer.startNode(姓名); writer.setValue(person.getName(); writer.endNode(); writer.startNode(年龄); writer.setValue(person.getAge()+); writer.endNode(); writer.startNode(转换器); writer.setValue(自定义的转换器); writer.endNode();Override/把XML或Json反序列化成对象public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) Person person = new Person(,-1); reader.moveDown(); person.setName(reader.getValue(); reader.moveUp(); reader.moveDown(); person.setAge(Integer.parseInt(reader.getValue(); reader.moveUp(); return person;public class Testpublic static void main(String args)Person bean =new Person(张三,19);XStream xstream = new XStream();xstream.registerConverter(new PersonConverter();/注册转换器/序列化String xml = xstream.toXML(bean);System.out.println(xml);/反序列化bean=(Person)xstream.fromXML(xml);System.out.println(bean);程序运行结果: 张三 19 自定义的转换器Person name=张三, age=19(3) 常用的转换器接口与抽象类SingleValueConverter:单值转换接口AbstractSingleValueConverter:单值转换抽象类Converter:常规转换器接口6. Xstream对象流的使用(1) Xstream对象输出流class Personprivate String name;private int age;public Person(String name, int age) = name;this.age = age;public class Testpublic static void main(String args) throws IOExceptionXStream xstream = new XStream();ObjectOutputStream out = xstream.createObjectOutputStream(System.out);out.writeObject(new Person(张三,12);out.writeObject(new Person(李四,19);out.writeObject(Hello);out.writeInt(12345);out.close();程序运行结果: 张三 12 李四 19 Hello 12345注意:XStream对象流是通过标准java.io.ObjectOutputStream和java.io.ObjectInputStream对象。因为XML文档只能有一个根节点,必须包装在一个序列化的所有元素 额外的根节点。 这个根节点默认 上面的例子所示。 (2) Xstream对象输出流class Personprivate String name;private int age;public Person(String name, int age) = name;this.age = age;Overridepublic String toString()return Person name= + name + , age= + age + ;public class Testpublic static void main(String args) throws IOException, ClassNotFoundExceptionString s=张三1212345;StringReader reader = new StringReader(s);XStream xstream = new XStream();ObjectInputStream in = xstream.createObjectInputStream(reader);System.out.println(Person) in.readObject();System.out.println(in.readInt();程序运行结果:Person name=张三, age=12123457. Xstream持久化API(1) 保存JavaBean对象class Personprivate String name;private int age;public Person(String name, int age) = name;this.age = age;Overridepublic String toString()return Person name= + name + , age= + age + ;public class Testpublic static void main(String args) throws IOException, ClassNotFoundExceptionPersistenceStrategy strategy = new FilePersistenceStrategy(new File(D:tmp);List list = new XmlArrayList(strategy);list.add(new Person(张三,13);/保存数据list.add(new Person(李四,21);list.add(new Person(王五,17);程序运行结果:如果我们检查D:tmp目录,有三个文件:int0.xml、int1.xml、int2.xml;每个对象都被序列化到XML文件里。(2) 读取并删除JavaBean对象public class Testpublic static void main(String args) throws IOException, ClassNotFoundExceptionPersistenceStrategy strategy = new FilePersistenceStrategy(new File(D:tmp);List list = new XmlArrayList(strategy);for (Iterator it = list.iterator(); it.hasNext();)System.out.println(Person) it.next();it.remove();/删除对象序列化文件程序运行结果:Person name=张三, age=13Person name=李四, age=21Person name=王五, age=178. Xstream操作Json(1) Xstream序列化Json的重命名XStreamAlias(人)class PersonXStreamAlias(姓名)priva
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 压力管道培训课件合集
- 2025年制造业行业智能制造技术应用前景研究报告
- 商场员工消防安全培训课件
- 2025年工业0行业智能制造技术应用前景研究报告
- 压力容器维修安全培训课件
- 2025年人工智能在医疗健康领域应用前景预测报告
- 国家事业单位招聘2025民族文化宫招聘拟聘用人员(第三批)笔试历年参考题库附带答案详解
- 国家事业单位招聘2025商务部配额许可证事务局第一次招聘15人笔试历年参考题库附带答案详解
- 北京市2025北京人民艺术剧院招聘6人笔试历年参考题库附带答案详解
- 东莞市2025广东东莞市自然资源局黄江分局招聘合同制聘员笔试历年参考题库附带答案详解
- 福建省全国名校联盟2026届高三上学期联合开学摸底考试语文试题及参考答案
- 2025年广工建筑电气试卷及答案
- 2024年广西桂林理工大学南宁分校招聘真题
- 排污许可证管理条例课件
- 乡镇人大主席“干在实处、走在前列”学习讨论发言材料
- 2025年食品安全管理员考试题库及参考答案
- 用户反馈收集及问题分析表
- 无人机飞行操作规范手册
- 【里斯】年轻一代新能源汽车消费洞察与预测 -新物种 新理念 新趋势(2024-2025)
- 医院收费室培训课件
- 信仰思政课件
评论
0/150
提交评论