本文描述如何使用CLR中的StringWriter,XmlSerializer将对象, 对象集合序列化为Xml格式的字符串, 同时描述如何进行反序列化.
![](/Images/OutliningIndicators/None.gif)
C#版本: C# 3.0
开发环境: VS 2008
![](/Images/OutliningIndicators/None.gif)
主要方法:
复制 保存using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
![](/Images/OutliningIndicators/None.gif)
namespace ConsoleApplication2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
public class SimpleSerializer
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 序列化对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="t">对象</param>
/// <returns></returns>
public static string Serialize<T>(T t)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
using (StringWriter sw = new StringWriter())
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
XmlSerializer xz = new XmlSerializer(t.GetType());
xz.Serialize(sw, t);
return sw.ToString();
}
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 反序列化为对象
/// </summary>
/// <param name="type">对象类型</param>
/// <param name="s">对象序列化后的Xml字符串</param>
/// <returns></returns>
public static object Deserialize(Type type, string s)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
using (StringReader sr = new StringReader(s))
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
XmlSerializer xz = new XmlSerializer(type);
return xz.Deserialize(sr);
}
}
}
}
定义一个用于测试的实体类: UserInfo
复制 保存using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
![](/Images/OutliningIndicators/None.gif)
namespace ConsoleApplication2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
[Serializable]
public class UserInfo
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
private int m_UserId;
![](/Images/OutliningIndicators/InBlock.gif)
[XmlElement("userId")]
public int UserId
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return m_UserId; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ m_UserId = value; }
}
private string m_UserName;
![](/Images/OutliningIndicators/InBlock.gif)
[XmlElement("userName")]
public string UserName
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return m_UserName; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ m_UserName = value; }
}
}
}
编写测试子程序:
复制 保存using System;
using System.Collections.Generic;
![](/Images/OutliningIndicators/None.gif)
namespace ConsoleApplication2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
class Program
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
static void Main(string[] args)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Program.TestOne();
Console.WriteLine(string.Empty);
![](/Images/OutliningIndicators/InBlock.gif)
Program.TestTwo();
Console.WriteLine(string.Empty);
![](/Images/OutliningIndicators/InBlock.gif)
Program.TestThree();
Console.WriteLine(string.Empty);
![](/Images/OutliningIndicators/InBlock.gif)
Program.TestFour();
}
public static void TestOne()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
UserInfo info = new UserInfo()
{ UserId = 1, UserName = "Guozhijian" };
Console.WriteLine(SimpleSerializer.Serialize<UserInfo>(info));
}
public static void TestTwo()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
List<UserInfo> list = new List<UserInfo>();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
list.Add(new UserInfo()
{ UserId = 1, UserName = "Guozhijian" });
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
list.Add(new UserInfo()
{ UserId = 2, UserName = "Zhenglanzhen" });
Console.WriteLine(SimpleSerializer.Serialize<List<UserInfo>>(list));
}
public static void TestThree()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
string s = SimpleSerializer.Serialize<UserInfo>(new UserInfo()
{ UserId = 1, UserName = "Guozhijian" });
UserInfo info = SimpleSerializer.Deserialize(typeof(UserInfo), s) as UserInfo;
Console.WriteLine(info.UserId.ToString() + ", " + info.UserName);
}
public static void TestFour()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
List<UserInfo> list = new List<UserInfo>();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
list.Add(new UserInfo()
{ UserId = 1, UserName = "Guozhijian" });
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
list.Add(new UserInfo()
{ UserId = 2, UserName = "Zhenglanzhen" });
string s = SimpleSerializer.Serialize<List<UserInfo>>(list);
List<UserInfo> newList = SimpleSerializer.Deserialize(typeof(List<UserInfo>), s) as List<UserInfo>;
foreach (var info in newList)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Console.WriteLine(info.UserId.ToString() + ", " + info.UserName);
}
}
}
}
输出结果为:
C:\WINDOWS\system32\cmd.exe 复制 保存
<?xml version="1.0" encoding="utf-16"?>
<UserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:
//www.w3.org/2001/XMLSchema">
<userId>1</userId>
<userName>Guozhijian</userName>
</UserInfo>
![](/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfUserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd
="http://www.w3.org/2001/XMLSchema">
<UserInfo>
<userId>1</userId>
<userName>Guozhijian</userName>
</UserInfo>
<UserInfo>
<userId>2</userId>
<userName>Zhenglanzhen</userName>
</UserInfo>
</ArrayOfUserInfo>
![](/Images/OutliningIndicators/None.gif)
1, Guozhijian
![](/Images/OutliningIndicators/None.gif)
1, Guozhijian
2, Zhenglanzhen
![](/Images/OutliningIndicators/None.gif)