美文网首页
XStream 基本用法

XStream 基本用法

作者: 丶君为红颜酔 | 来源:发表于2018-08-09 09:42 被阅读0次

    摘自https://www.cnblogs.com/LiZhiW/p/4313493.html

    基本使用

    <!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
            <dependency>
                <groupId>com.thoughtworks.xstream</groupId>
                <artifactId>xstream</artifactId>
                <version>1.4.10</version>
            </dependency>
    
       //XStream xstream = new XStream();//需要XPP3库
            //XStream xstream = new XStream(new DomDriver());//不需要XPP3库
            XStream xstream = new XStream(new StaxDriver());//不需要XPP3库开始使用Java6 
            //XML序列化
            String xml = xstream.toXML(bean);
            System.out.println(xml);
            //XML反序列化
            bean=(Person)xstream.fromXML(xml);
            System.out.println(bean);
    
            xstream.alias("人",Person.class);//为类名节点重命名
            xstream.aliasPackage("com.lzw", "test");//为包名称重命名
            xstream.aliasField("姓名", Person.class,"name");//为类的字段节点重命名
            
            <test.Person>   
              <姓名>张三</姓名>
              <年龄>19</年龄>
            </test.Person>
    
    
     xstream.addImplicitCollection(Person.class, "friends");//省略集合根节点
            <test.Person>
              <name>张三</name>
              <age>19</age>
              (+)<string>李四</string>
              <string>王五</string>
              <string>赵六</string>
            </test.Person>
    
    xstream.useAttributeFor(Person.class, "name");//把字段节点设置成属性
              <test.Person name="张三">
              <age>19</age>
              <friends class="java.util.Arrays$ArrayList">
                <a class="string-array">
                  <string>李四</string>
                  <string>王五</string>
                  <string>赵六</string>
                </a>
              </friends>
        </test.Person>
    Person [name=张三, age=19, friends=[李四, 王五, 赵六]]
    
    xstream.omitField(Person.class, "friends");//把字段节点隐藏
    

    使用注解

    XStream xstream = new XStream();
    xstream.processAnnotations(Person.class);//应用Person类的注解
    xstream.autodetectAnnotations(true);//自动检测注解
    
    重命名:@XStreamAlias() 
    省略集合根节点:@XStreamImplicit  
    把字段节点设置成属性:@XStreamAsAttribute  
    隐藏字段:@XStreamOmitField
    设置转换器:@XStreamConverter()
        
    

    其他用法

     ## 流
        XStream 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();
            
            
            
            String s="<object-stream><test.Person><name>张三</name><age>12</age></test.Person><int>12345</int></object-stream>";
            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());
            
    ## 持久化
    PersistenceStrategy 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));
            
    PersistenceStrategy 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();//删除对象序列化文件
            }
    
    

    自封装类

    public class XmlHelper {
                @Data
            @XStreamAlias("XMLInfo")
            public class PrintSyncDto {
                private String merchantCode;
                private String serviceOrderNo;
                private String client;
                private String sercet;
                private String nonceStr;
                private String signature;
                private PrintData printData;
    
                @Data
                public static class PrintData {
                    private String useSenderInfo;
                    private String bigAccountDataId;
                    private String businessType;
                }
    
            }
        
    
        public static void main(String[] args) {
    
    
            XStream xstream = getXStream();
            PrintSyncDto printSyncDto = new PrintSyncDto();
            printSyncDto.setMerchantCode("1");
            printSyncDto.setServiceOrderNo("2");
            printSyncDto.setClient("3");
            printSyncDto.setSercet("4");
            printSyncDto.setNonceStr("5");
            printSyncDto.setSignature("6");
            PrintSyncDto.PrintData printData = new PrintSyncDto.PrintData();
            printData.setUseSenderInfo("7");
            printData.setBigAccountDataId("8");
            printData.setBusinessType("9");
            printSyncDto.setPrintData(printData);
            String xml = xstream.toXML(printSyncDto);
            System.out.println(xml);
            String json = "";
            System.out.println(json = XmlHelper.xmlToJson(xml, xstream));
            System.out.println((XmlHelper.jsonStrToXml(json, PrintSyncDto.class, xstream)));
    //        System.out.println(JSON.toJSONString(xstream.fromXML(xml)));
        }
    
        public static final XStream getXStream() {
            XStream xstream = new XStream(new StaxDriver());
            xstream.autodetectAnnotations(true);//自动检测注解
            return xstream;
        }
    
        public static final String xmlToJson(String xml, XStream xstream) {
            Object o = xstream.fromXML(xml);
            return JSON.toJSONString(o);
        }
    
        public static final <T> String jsonToXml(JSONObject jo, Class<T> clazz, XStream xstream) {
            return xstream.toXML(JSON.toJavaObject(jo, clazz));
        }
    
        public static final <T> String jsonStrToXml(String json, Class<T> clazz, XStream xstream) {
            return xstream.toXML(JSON.parseObject(json, clazz));
        }
    }
    
    

    相关文章

      网友评论

          本文标题:XStream 基本用法

          本文链接:https://www.haomeiwen.com/subject/drcqbftx.html