zoukankan      html  css  js  c++  java
  • 操作 使用XML的方法

    XmlHelper是一个工具类

      public static class XMLHelper
        {
            /// <summary>
            /// XML的编码方式,默认是UTF-8
            /// </summary>
            public static Encoding xmlEncode;
            /// <summary>
            /// 静态的构造函数,初始化此类
            /// </summary>
            static XMLHelper()
            {
                xmlEncode = Encoding.UTF8;
            }
    
            /// <summary>
            /// 将对象序列化为XML写入到流中
            /// </summary>
            /// <param name="stream">要写入的流</param>
            /// <param name="obj">被写入的对象</param>
            static void XmlSerializeInternal(Stream stream, Object obj)
            {
                //创建序列化对象,只有public的class才可以进行xml序列化
                XmlSerializer serialize = new XmlSerializer(obj.GetType());
                //创建写入对象
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;/*表示缩进*/
                settings.IndentChars = " ";/*表示缩进的距离为一个Tab*/
                settings.NewLineChars = "
    ";/*换行符,Window下换行符*/
                settings.Encoding = xmlEncode;/*编码方式*/
                //开始正式写入
                using (XmlWriter writer = XmlWriter.Create(stream, settings))
                {
                    serialize.Serialize(writer, obj);
                }
            }
    
            /// <summary>
            /// 将对象序列化为xml并返回xml字符串
            /// </summary>
            /// <param name="obj">对象</param>
            /// <returns>序列化后的xml字符串</returns>
            public static String XmlSerializeFromString(Object obj)
            {
                //创建内存流对象
                using (MemoryStream stream = new MemoryStream())
                {
                    //将对象以xml形式写入到内存流中
                    XmlSerializeInternal(stream, obj);
                    stream.Position = 0;/*设置流的的位置在开始处,以便我们可以从头读取,和stream.Seek(0, SeekOrigin.Begin);一样*/
                    using (StreamReader reader = new StreamReader(stream, xmlEncode))
                    {
                        return reader.ReadToEnd();/*代码很花哨,几乎都是语法糖*/
                    }
                }
            }
    
            /// <summary>
            /// 将对象按照xml序列化写入到文件中
            /// </summary>
            /// <param name="path">文件路径</param>
            /// <param name="obj">写入的对象</param>
            public static void XmlSerializeToFile(String path, Object obj)
            {
                //创建文件写入流对象
                using (FileStream file = new FileStream(path, FileMode.Create, FileAccess.Write))
                {
                    //写入将对象转成xml流的对象
                    XmlSerializeInternal(file, obj);
                }
            }
    
            /// <summary>
            /// 将xml字符串转成对象
            /// </summary>
            /// <typeparam name="T">要转换的对象</typeparam>
            /// <param name="xmlStr">xml字符串</param>
            /// <returns>返回转换的对象</returns>
            public static T XmlDeserializeFromObject<T>(String xmlStr)
            {
                //以前刚学泛型时,就是感觉泛型好流弊,就是不明白这个词是什么意思.后来觉得模板更加贴切
                XmlSerializer serialize = new XmlSerializer(typeof(T));
                //创建内存流并进行转换
                using (MemoryStream stream = new MemoryStream(xmlEncode.GetBytes(xmlStr)))
                {
                    //采用StreamReader是为了编码
                    using (StreamReader reader = new StreamReader(stream, xmlEncode))
                    {
                        return (T)serialize.Deserialize(reader);
                    }
                }
            }
    
            /// <summary>
            /// 将xml文件序列化为对象
            /// </summary>
            /// <typeparam name="T">泛型,待指定的类型</typeparam>
            /// <param name="path">文件绝对全路径字符串</param>
            /// <returns>返回对象</returns>
            public static T XmlDeserializeFromFile<T>(String path)
            {
                //创建xml反序列化对象
                XmlSerializer serialize = new XmlSerializer(typeof(T));
                //获取xml文件流,并反序列化转成对象并返回
                using (StreamReader reader = new StreamReader(path, xmlEncode))
                {
                    return (T)serialize.Deserialize(reader);
                }
            }
        }

    调用使用工具类

    // 1. 首先要创建或者得到一个数据对象
    Order order = GetOrderById(123);
    
    
    // 2. 用序列化的方法生成XML
    string xml = XmlHelper.XmlSerialize(order, Encoding.UTF8);
    
    
    // 3. 从XML读取数据并生成对象
    Order order2 = XmlHelper.XmlDeserialize<Order>(xml, Encoding.UTF8);
  • 相关阅读:
    [BJOI2019] 光线
    [BJOI2019]奥术神杖
    [HNOI2014]江南乐
    [SDOI2018]荣誉称号
    [APIO2015]雅加达的摩天楼
    [TJOI2015]线性代数
    【CF163E 】e-Government
    【CF917D】Stranger Trees
    网络流(四)dinic算法
    网络流(三)最大流最小割定理
  • 原文地址:https://www.cnblogs.com/lunawzh/p/5229625.html
Copyright © 2011-2022 走看看