加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML类及XmlSerializer 的使用

发布时间:2020-12-15 23:36:36 所属栏目:百科 来源:网络整理
导读:序列化成 xml 则相较序列化成二进制受到很多限制 , 主要有三个 . 1 是只能序列化 public 的字段或属性 . 2 是有些类型是不能序列化 . 比如上面的 Hastable 和 TimeSpan 这样的类型 . 3 是类中必须有无参的构造函数才能被序列化成 xml. 下面是 User.xml 文件

序列化成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,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类有所帮助,并且对序列化的操作有所认识。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读