zoukankan      html  css  js  c++  java
  • XML的序列化和反序列化

    序列化和反序列化方法

    //将对象序列化为XML,type:对象类型  obj:对象
    public static string Serializer(Type type, object obj)
    {
      MemoryStream Stream = new MemoryStream();
       //创建序列化对象 
       XmlSerializer xml = new XmlSerializer(type);
       try
       {
         //序列化对象 
          xml.Serialize(Stream, obj);
       }
       catch (InvalidOperationException)
       {
          throw;
       }
       Stream.Position = 0;
       StreamReader sr = new StreamReader(Stream, Encoding.UTF8);
       string str = sr.ReadToEnd();
       return str;
    } 
    //将XML反序列化为对象,type:需要反序列化成的对象类型,xml:xml字符串
    public
    static object Deserialize(Type type, string xml) { try { using (StringReader sr = new StringReader(xml)) { XmlSerializer xmldes = new XmlSerializer(type); return xmldes.Deserialize(sr); } } catch (Exception e) { return null; } }

    将DataTable序列化为XML字符串

            /// <summary>
            /// 将DataTable对象转换成XML字符串
            /// </summary>
            /// <param name="dt">DataTable对象</param>
            /// <returns>XML字符串</returns>
            public static string DataTableToXml(DataTable dt)
            {
                if (dt != null)
                {
                    try
                    {
                        MemoryStream ms = new MemoryStream();
                        //根据ms实例化XmlWt
                        XmlTextWriter XmlWt = new XmlTextWriter(ms, Encoding.Unicode);
                        //获取ds中的数据
                        dt.WriteXml(XmlWt);
                        int count = (int)ms.Length;
                        byte[] temp = new byte[count];
                        ms.Seek(0, SeekOrigin.Begin);
                        ms.Read(temp, 0, count);
                        //返回Unicode编码的文本
                        UnicodeEncoding ucode = new UnicodeEncoding();
                        string returnValue = ucode.GetString(temp).Trim();
                        return returnValue;
                    }
                    catch (System.Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        //释放资源
                        if (XmlWt != null)
                        {
                            XmlWt.Close();
                            ms.Close();
                            ms.Dispose();
                        }
                    }
                }
                else
                {
                    return "";
                }
            }

    将XML反序列化为DataTable

    public static DataTable XmlToDataTable(string xmlStr)
     {
             DataSet ds = null;   
             if (!string.IsNullOrEmpty(xmlStr))
             {
                 try
                 {
                     ds = new DataSet();
                     //读取字符串中的信息
                     StringReader StrStream= new StringReader(xmlStr);
                     //获取StrStream中的数据
                     XmlTextReader Xmlrdr= new XmlTextReader(StrStream);
                     //ds获取Xmlrdr中的数据                
                     ds.ReadXml(Xmlrdr);
                     return ds;
                 }
                 catch (Exception e)
                 {
                     throw e;
                 }
                 finally
                 {
                     //释放资源
                     if (Xmlrdr != null)
                     {
                         Xmlrdr.Close();
                         StrStream.Close();
                         StrStream.Dispose();
                     }
                 }
             }
             else
             {
                 return null;
             }
    
             if (ds != null && ds.Tables.Count > 0)
                 return ds.Tables[0];
             return null;
    }    

    在序列化的过程中,遇到节点需要更换名称,或者节点添加属性的,可以通过以下操作来实现

    根节点:[XmlType("testClass")]或者[XmlRoot("testClass")],两者都可以
    元素节点:[XmlElement("name")]
    属性节点:[XmlAttribute("id")]
    列表子元素节点:[XmlArrayItem("Detail")]
    列表元素自身:[XmlArray("Items")]
    排除不需要序列化的成员:[XmlIgnore]
    强制序列化成员顺序:[Order=1]
    去掉List节点:[XmlElement("子节点名称")]

    如果要将节点更换名称,可以在类的属性上面添加[XmlElement("name")],那么是新的名称

    [XmlRoot("testClass")]
    public class TestClass
    {
      [XmlAttribute("id")]
      public string Id {get;set;}
      [XmlElement("order")]  
      public string Order {get;set;}      
      [XmlElement("product")]  
      public string Product {get;set;}  
      [XmlElement("testList")]
      public string List<Test> list {get;set;}
    }

    id会变成根节点的属性,order和product是节点,list是节点

    <testClass id="">

    <order></order>

    <product></product>

    <testList></testList>

    <testList></testList>

    </testClass>

  • 相关阅读:
    推荐给新手gopher的一些书籍
    flask中路由处理
    flask中间件之请求扩展
    Chrome调试技巧
    iconfont 使用
    @font-face 使用过程
    SEO
    数据结构与算法2-4 队列
    数据结构与算法2-4 堆栈链式存储
    软件推荐--Sublime Text3常用快捷键查询(不断更新ing)
  • 原文地址:https://www.cnblogs.com/zfylzl/p/5643583.html
Copyright © 2011-2022 走看看