您的位置:首页 > 其它

XML类及XmlSerializer 的使用

2013-07-22 08:58 134 查看
序列化成xml则相较序列化成二进制受到很多限制,主要有三个.

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

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

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文件夹中

在最上部加上对xml的using : 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属性,Serializable和NonSerializable属性将会被忽略,但是使用XmlIgnore属性,和NonSerializable属性类似。

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

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

C# XmlSerializer的使用基本情况就向你介绍到这里,希望对你了解和学习C# XmlSerializer类有所帮助,并且对序列化的操作有所认识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  XML XmlSerializer &