现在的位置: 首页 > 综合 > 正文

关于在自己的xml里面嵌入XmlSerializer解析出来的xml的办法

2013年04月09日 ⁄ 综合 ⁄ 共 1814字 ⁄ 字号 评论关闭

因为用到了不少如DataTable等数据结构。需要保存在硬盘上。为了想偷一点小小的懒.所以使用了类库中的XmlSerializer。发现使用的时候还有不少的曲折。不过经过研究觉得。这样一来方便许多。主要的想法是在memory里面开了一个空间来存放xmlserializer产生的文件。这样就不需要产生在硬盘上了
代码如下:

//Serializer
           XmlDocument doc = new XmlDocument();
            XmlSerializer ser = new XmlSerializer(typeof(DataTable));
            MemoryStream ms = new MemoryStream();// create a stream in memory
            XmlWriter writer = XmlWriter.Create(ms);
            //dt.WriteXml(writer);
            try
            {
                ser.Serialize(writer, dataTable);
            }
            catch (Exception ex)
            {
                throw new Exception("Something wrong while serialize datatable", ex);
            }
            writer.Close();
            byte[] b = ms.ToArray();
            ms.Close();
            ms = new MemoryStream(b);
            XmlDocument tempDoc = new XmlDocument();
            tempDoc.Load(ms);
            ms.Close();

            XmlNode tableNode = doc.ImportNode(tempDoc.DocumentElement, true);
           //tableNode name is generate automaticaly is called DataTable
            chartDataNode.AppendChild(tableNode);

//Deserialize

            XmlSerializer ser = new XmlSerializer(typeof(DataTable));
            XmlDocument tempDoc = new XmlDocument();
          //Serializer Create a node called datatable in above code
            XmlNode rootnode = tempDoc.ImportNode(doc.SelectSingleNode(".//DataTable"), true);
            //doc is the xmldocment create when Serialize
            tempDoc.AppendChild(rootnode);
            MemoryStream ms = new MemoryStream();
            XmlWriter writer2 = XmlWriter.Create(ms);
            tempDoc.Save(writer2);
            writer2.Close();
            byte[] b2 = ms.ToArray();
            ms.Close();

            ms = new MemoryStream(b2);
            XmlReader reader = XmlReader.Create(ms);

            dataTable = (DataTable)ser.Deserialize(reader);
            

            reader.Close();
            ms.Close();

【上篇】
【下篇】

抱歉!评论已关闭.