XML类及XmlSerializer 的使用

简介:

序列化成xml则相较序列化成二进制受到很多限制,主要有三个.


1是只能序列化public的字段或属性.


2是有些类型是不能序列化.比如上面的HastableTimeSpan这样的类型.


3是类中必须有无参的构造函数才能被序列化成xml.


下面是User.xml文件的格式,放在网站跟目录中,本例只为实现操作xml的功能,所以登录密码没有加密,在实际应用中,你应该考虑这个问题。同时,这个文件应该赋予写入的权限,这点比较容易疏漏。

<?xml version="1.0"?>

<UserLogin>

<User>

  <UserCode>001</UserCode>

  <UserName>操作员1</UserName>

  <UserPwd>111</UserPwd>

</User>

<User>

  <UserCode>002</UserCode>

  <UserName>操作员2</UserName>

  <UserPwd>222</UserPwd>

</User>

</UserLogin>


下面我们开始编码,首先vs2005中创建asp.net 网站,选择c#语言


新建一个web窗体,放上三个textbox,三个button,暂时不用改名字,为了方便大家(以及我懒)这个例子中没有改控件的名字(脸红)。


接着新建项目--类,取名为XmlRW.cs,存放到app_Code文件夹中


在最上部加上对xmlusing  : using System.Xml  如下面的代码

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Xml;


/// <summary>

/// Xml文件的读写类

/// </summary>

///

public class XmlRW

{

  public XmlRW()

   {

      //

      // TODO: 在此处添加构造函数逻辑

      //

   }


//// 大家注意我们下面的内容在这里写


}


然后,我们开始写三个方法,来完成对xml文件记录的增加,修改和删除,也就是对UserCode,UserName,NamePwd的操作。代码如下:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Xml;


/// <summary>

/// Xml文件的读写类

/// </summary>

///

public class XmlRW

{

  public XmlRW()

   {

      //

      // TODO: 在此处添加构造函数逻辑

      //

   }


  //WriteXml 完成对User的添加操作

  //FileName 当前xml文件的存放位置

  //UserCode 欲添加用户的编码

  //UserName 欲添加用户的姓名

  //UserPassword 欲添加用户的密码


  public void WriteXML(string FileName,string UserCode,stringUserName,string UserPassword)

   {


      //初始化XML文档操作类

      XmlDocument myDoc = new XmlDocument();

      //加载XML文件

      myDoc.Load(FileName);


      //添加元素--UserCode

      XmlElement ele = myDoc.CreateElement("UserCode");

      XmlText text = myDoc.CreateTextNode(UserCode);


      //添加元素--UserName

      XmlElement ele1 = myDoc.CreateElement("UserName");

      XmlText text1 = myDoc.CreateTextNode(UserName);


      //添加元素--UserPwd

      XmlElement ele2 = myDoc.CreateElement("UserPwd");

      XmlText text2 = myDoc.CreateTextNode(UserPassword);


      //添加节点 User要对应我们xml文件中的节点名字

      XmlNode newElem = myDoc.CreateNode("element","User", "");


      //在节点中添加元素

      newElem.AppendChild(ele);

      newElem.LastChild.AppendChild(text);

      newElem.AppendChild(ele1);

      newElem.LastChild.AppendChild(text1);

      newElem.AppendChild(ele2);

      newElem.LastChild.AppendChild(text2);


      //将节点添加到文档中

      XmlElement root = myDoc.DocumentElement;

      root.AppendChild(newElem);


      //保存

      myDoc.Save(FileName);


   }


  //DeleteNode 完成对User的添加操作

  //FileName 当前xml文件的存放位置

  //UserCode 欲添加用户的编码


  public void DeleteNode(string FileName, string UserCode)

   {

      //初始化XML文档操作类

      XmlDocument myDoc = new XmlDocument();

      //加载XML文件

      myDoc.Load(FileName);


      //搜索指定某列,一般是主键列

      XmlNodeList myNode = myDoc.SelectNodes("//UserCode");


      //判断是否有这个节点


      if (!(myNode == null))

      {

          //遍历节点,找到符合条件的元素


          foreach (XmlNode  xn in myNode)

          {

               if (xn.InnerXml  == UserCode)

                   //删除元素的父节点

                   xn.ParentNode.ParentNode.RemoveChild(xn.ParentNode);

          }

      }


      //保存

      myDoc.Save(FileName);


   }


  //WriteXml 完成对User的修改密码操作

  //FileName 当前xml文件的存放位置

  //UserCode 欲操作用户的编码

  //UserPassword 欲修改用户的密码


  public void UpdateXML(string FileName, string UserCode, stringUserPassword)

   {


      //初始化XML文档操作类

      XmlDocument myDoc = new XmlDocument();

      //加载XML文件

      myDoc.Load(FileName);


      //搜索指定的节点

      System.Xml.XmlNodeList nodes = myDoc.SelectNodes("//User");


      if (nodes != null)

      {

          foreach (System.Xml.XmlNode xn in nodes)

          {

               if(xn.SelectSingleNode("UserCode").InnerText == UserCode)

              {

                  xn.SelectSingleNode("UserPwd").InnerText = UserPassword;

               }


          }

      }


      myDoc.Save(FileName);


   }


}


Ok



C# XmlSerializer实现序列化浅析


  C# XmlSerializer类是实现序列化的一个类,那么关于C# XmlSerializer的学习我们要掌握怎么样的操作方法呢?那么这里向你详细介绍具体的操作细节情况。


  C# XmlSerializer是什么呢?它是使用二进制格式化程序进行序列化的一个类,那么具体的通过C# XmlSerializer如何实现序列化操作呢?在序列化操作的过程中需要注意些什么呢?


  C# XmlSerializer的出处:


      using System.Xml.Serialization;


  C# XmlSerializer实现序列化:


      XmlSerializer xml = new XmlSerializer(typeof(Test));  

      FileStream fs = newFileStream(@"c:\t.xml",FileMode.Create);  

      xml.Serialize(fs, t);  

      fs.Close();


  C# XmlSerializer实现反序列化:


      FileStream fs = new FileStream(@"c:\t.xml", FileMode.Open);  

      XmlSerializer xml = new XmlSerializer(typeof(Test));  

      Test t = (Test)xml.Deserialize(fs);


  C# XmlSerializer类与主流的序列化类的几个不同点是:


   1、不需要Serializable属性,SerializableNonSerializable属性将会被忽略,但是使用XmlIgnore属性,和NonSerializable属性类似。


   2、该类不能安全地访问私有变成员,所以学要将私有成员改为公共成员,或者提供合适的公共特性。


   3、要求被序列化的类要有一个默认的构造器。


  C# XmlSerializer的使用基本情况就向你介绍到这里,希望对你了解和学习C# XmlSerializer类有所帮助,并且对序列化的操作有所认识。


本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/1254060,如需转载请自行联系原作者

相关文章
|
4月前
|
XML 存储 JSON
如何快速实现XML与JSON转换
XML与JSON之间的转换常常用于以下场景: 1.数据交换:当需要在不同的系统、平台或服务之间进行数据交换时,常常会使用XML或JSON进行数据的序列化和反序列化。比如,一个Web服务可能需要返回数据给一个移动应用,这时,数据就可以通过XML或JSON格式进行传输。
|
4月前
|
XML 数据格式
xml反射
xml反射
30 0
|
6月前
|
XML Java API
XML之反射
XML之反射
33 0
|
8月前
|
XML 存储 JavaScript
SAX解析XML
SAX解析XML
49 0
|
10月前
|
XML 数据格式
|
XML JSON 数据格式
.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
241 0
|
XML 数据格式
XML学习总结——SAXReader解析xml文件,实现反射 代码实例
XML学习总结——SAXReader解析xml文件,实现反射 代码实例
210 0
|
XML Java API
Jaxb2 实现JavaBean与xml互转
Jaxb2 实现JavaBean与xml互转

相关课程

更多