黑马程序员之C#学习笔记: XML和实体序列化和反序列化
2012-11-11 20:52
676 查看
--------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
类为我们提供了自己对象串行化(Serialize)和反串行化(Deserialize)的xml的方法,该类可以序列化的内容:
公共类的公共读写字段或者属性
XmlElement对象
XmlNode对象
Dataset对象
实现了Icollection 或IEnumerable的类
该类在设计中有一个设计需求:
需要被序列化的类要提供一个空参数的构造函数,否则运行时会出现异常
在开发过程中可能会有很多地方要用到对象和XML相互转化,在此提供一个通用的类,提供泛类型的支持。
该类提供两方法,一个是从实体到返回XML字符串的方法,一个是把XML字符串装成对象实体的方法。下面我们来看看这个类是怎么用的。
首先建两个类USer和Users,User测试一个实体的序列化和反序列化,USers测试一个List集合序列化和反序列化。注意这两个类都标注了[Serializable]特性,并且提供了空参数的构造函数。
[Serializable]
public class User
{
public int ID { get; set; }
public string Name { get; set; }
public string Add { get; set; }
public int Age { get; set; }
public User()
{
this.ID = default(int);
this.Name = default(string);
this.Add = default(string);
this.Age = default(int);
}
}
[Serializable]
public class Users
{
public List<User> Datas { get; set; }
public Users()
{
this.Datas=new List<User>();
}
}
下面我们建一个页面Default.aspx,在这个页面中我们测试序列化,提供两个按钮和两个TextBox,来分别显示单个实体的序列化和List集合的序列化。
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="一个对象序列化" onclick="Button1_Click" />
<asp:TextBox ID="TextBox1" runat="server" Width="100%" Height="200"></asp:TextBox>
<asp:Button ID="Button2" runat="server" Text="多个对象序列化" onclick="Button2_Click" />
<asp:TextBox ID="TextBox2" runat="server" Width="100%" Height="200"></asp:TextBox>
</div>
</form>
后台代码的实现:
/// <summary>
/// 一个对象序列化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
User user = new User()
{ ID=1001,Name="小王",Add="北京",Age=21};
var str = SHelper.SaveXmlFromObj<User>(user);
this.TextBox1.Text = str;
}
/// <summary>
/// 多个对象序列化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button2_Click(object sender, EventArgs e)
{
Users users = new Users();
User user = new User() { ID = 1001, Name = "小王", Add = "北京", Age = 21 };
users.Datas.Add(user);
users.Datas.Add(user);
users.Datas.Add(user);
var str = SHelper.SaveXmlFromObj<Users>(users);
this.TextBox2.Text = str;
}
序列化结果如下:
单对象:
<?xml version="1.0"?>
<User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>1001</ID> <Name>小王</Name> <Add>北京</Add> <Age>21</Age>
</User>
List集合
<?xml version="1.0"?>
<Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Datas> <User>
<ID>1001</ID> <Name>小王</Name> <Add>北京</Add> <Age>21</Age> </User> <User>
<ID>1001</ID> <Name>小王</Name> <Add>北京</Add> <Age>21</Age> </User> <User>
<ID>1001</ID> <Name>小王</Name> <Add>北京</Add> <Age>21</Age> </User> </Datas>
</Users>
下面我们来测试反序列化:
首先建一个webservice,写两个测试方法:
[WebMethod]
public string GetObjFromXml(string data)
{
var obj = SHelper.LoadObjFromXML<User>(data);
if (obj != null)
{ return obj.Name; }
else { return "传入数据出错"; }
}
[WebMethod]
public string GetObjsFromXml(string data)
{
var obj = SHelper.LoadObjFromXML<Users>(data);
if (obj != null)
{
string returnstr = "";
foreach (User user in obj.Datas)
{
returnstr += user.Name + "\n";
}
return returnstr;
}
else
{
return "传入数据出错";
}
}
编译后运行,我们用刚才序列化出来的字符串贴出参数值位置就可以测试反序列化的方法,在此不再详述,有兴趣的童鞋可以把实例代码运行。
---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
类为我们提供了自己对象串行化(Serialize)和反串行化(Deserialize)的xml的方法,该类可以序列化的内容:
公共类的公共读写字段或者属性
XmlElement对象
XmlNode对象
Dataset对象
实现了Icollection 或IEnumerable的类
该类在设计中有一个设计需求:
需要被序列化的类要提供一个空参数的构造函数,否则运行时会出现异常
在开发过程中可能会有很多地方要用到对象和XML相互转化,在此提供一个通用的类,提供泛类型的支持。
该类提供两方法,一个是从实体到返回XML字符串的方法,一个是把XML字符串装成对象实体的方法。下面我们来看看这个类是怎么用的。
首先建两个类USer和Users,User测试一个实体的序列化和反序列化,USers测试一个List集合序列化和反序列化。注意这两个类都标注了[Serializable]特性,并且提供了空参数的构造函数。
[Serializable]
public class User
{
public int ID { get; set; }
public string Name { get; set; }
public string Add { get; set; }
public int Age { get; set; }
public User()
{
this.ID = default(int);
this.Name = default(string);
this.Add = default(string);
this.Age = default(int);
}
}
[Serializable]
public class Users
{
public List<User> Datas { get; set; }
public Users()
{
this.Datas=new List<User>();
}
}
下面我们建一个页面Default.aspx,在这个页面中我们测试序列化,提供两个按钮和两个TextBox,来分别显示单个实体的序列化和List集合的序列化。
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="一个对象序列化" onclick="Button1_Click" />
<asp:TextBox ID="TextBox1" runat="server" Width="100%" Height="200"></asp:TextBox>
<asp:Button ID="Button2" runat="server" Text="多个对象序列化" onclick="Button2_Click" />
<asp:TextBox ID="TextBox2" runat="server" Width="100%" Height="200"></asp:TextBox>
</div>
</form>
后台代码的实现:
/// <summary>
/// 一个对象序列化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
User user = new User()
{ ID=1001,Name="小王",Add="北京",Age=21};
var str = SHelper.SaveXmlFromObj<User>(user);
this.TextBox1.Text = str;
}
/// <summary>
/// 多个对象序列化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button2_Click(object sender, EventArgs e)
{
Users users = new Users();
User user = new User() { ID = 1001, Name = "小王", Add = "北京", Age = 21 };
users.Datas.Add(user);
users.Datas.Add(user);
users.Datas.Add(user);
var str = SHelper.SaveXmlFromObj<Users>(users);
this.TextBox2.Text = str;
}
序列化结果如下:
单对象:
<?xml version="1.0"?>
<User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>1001</ID> <Name>小王</Name> <Add>北京</Add> <Age>21</Age>
</User>
List集合
<?xml version="1.0"?>
<Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Datas> <User>
<ID>1001</ID> <Name>小王</Name> <Add>北京</Add> <Age>21</Age> </User> <User>
<ID>1001</ID> <Name>小王</Name> <Add>北京</Add> <Age>21</Age> </User> <User>
<ID>1001</ID> <Name>小王</Name> <Add>北京</Add> <Age>21</Age> </User> </Datas>
</Users>
下面我们来测试反序列化:
首先建一个webservice,写两个测试方法:
[WebMethod]
public string GetObjFromXml(string data)
{
var obj = SHelper.LoadObjFromXML<User>(data);
if (obj != null)
{ return obj.Name; }
else { return "传入数据出错"; }
}
[WebMethod]
public string GetObjsFromXml(string data)
{
var obj = SHelper.LoadObjFromXML<Users>(data);
if (obj != null)
{
string returnstr = "";
foreach (User user in obj.Datas)
{
returnstr += user.Name + "\n";
}
return returnstr;
}
else
{
return "传入数据出错";
}
}
编译后运行,我们用刚才序列化出来的字符串贴出参数值位置就可以测试反序列化的方法,在此不再详述,有兴趣的童鞋可以把实例代码运行。
---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
相关文章推荐
- C# 中XML序列化与反序列化学习笔记
- 黑马程序员 C#学习笔记⑨ 序列化对象
- 分享C#实现XML和实体序列化和反序列化的代码
- 黑马程序员之c#学习笔记:XML与HTML的主要区别
- c#学习笔记之序列化与反序列化-1
- 黑马程序员之C#学习笔记: xml文件读取
- c#学习笔记之序列化与反序列化-2
- 关于在C#中,将XML源文件序列化和反序列化的问题
- 黑马程序员之C#学习笔记:数组的复制四种方法
- 黑马程序员之ASP.NET学习笔记:.NET,ASP.NET,C#,VisualStudio之间的关系是什么?
- C# XmlSerializer将对象序列化以及反序列化(Sqlite数据库)
- 黑马程序员之C#学习笔记:随机产生1-100的随即数插入到数组中,数字不能有重复
- C#中XML序列化和反序列化初探
- 黑马程序员之C#学习笔记:字符串函数
- 黑马程序员之C#学习笔记:数据库char 和nchar 、varchar 和nvarchar 的区别
- 黑马程序员之C#学习笔记: 解决三大问题
- 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)
- 黑马程序员之asp.net学习笔记:巧用C#做中间语言 实现java调用.net
- c# XML和实体类之间相互转换(序列化和反序列化)
- 黑马程序员之C#编程基础学习笔记:提示用户输入用户名,然后再提示输入密码,如果用户名是"admin"并且密码是“888888”,则提示正确,否则提示错误,如果用户名不是admin还提示用户用户名不存在