本文描述如何使用CLR中的StringWriter,XmlSerializer将对象, 对象集合序列化为Xml格式的字符串, 同时描述如何进行反序列化.
C#版本: C# 3.0
开发环境: VS 2008
主要方法:
复制 保存using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication2
{
public class SimpleSerializer
{
/// <summary>
/// 序列化对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="t">对象</param>
/// <returns></returns>
public static string Serialize<T>(T t)
{
using (StringWriter sw = new StringWriter())
{
XmlSerializer xz = new XmlSerializer(t.GetType());
xz.Serialize(sw, t);
return sw.ToString();
}
}
/// <summary>
/// 反序列化为对象
/// </summary>
/// <param name="type">对象类型</param>
/// <param name="s">对象序列化后的Xml字符串</param>
/// <returns></returns>
public static object Deserialize(Type type, string s)
{
using (StringReader sr = new StringReader(s))
{
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;
namespace ConsoleApplication2
{
[Serializable]
public class UserInfo
{
private int m_UserId;
[XmlElement("userId")]
public int UserId
{
get { return m_UserId; }
set { m_UserId = value; }
}
private string m_UserName;
[XmlElement("userName")]
public string UserName
{
get { return m_UserName; }
set { m_UserName = value; }
}
}
}
编写测试子程序:
复制 保存using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Program.TestOne();
Console.WriteLine(string.Empty);
Program.TestTwo();
Console.WriteLine(string.Empty);
Program.TestThree();
Console.WriteLine(string.Empty);
Program.TestFour();
}
public static void TestOne()
{
UserInfo info = new UserInfo() { UserId = 1, UserName = "Guozhijian" };
Console.WriteLine(SimpleSerializer.Serialize<UserInfo>(info));
}
public static void TestTwo()
{
List<UserInfo> list = new List<UserInfo>();
list.Add(new UserInfo() { UserId = 1, UserName = "Guozhijian" });
list.Add(new UserInfo() { UserId = 2, UserName = "Zhenglanzhen" });
Console.WriteLine(SimpleSerializer.Serialize<List<UserInfo>>(list));
}
public static void TestThree()
{
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()
{
List<UserInfo> list = new List<UserInfo>();
list.Add(new UserInfo() { UserId = 1, UserName = "Guozhijian" });
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)
{
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>
<?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>
1, Guozhijian
1, Guozhijian
2, Zhenglanzhen
C#版本: C# 3.0
开发环境: VS 2008
主要方法:
复制 保存using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication2
{
public class SimpleSerializer
{
/// <summary>
/// 序列化对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="t">对象</param>
/// <returns></returns>
public static string Serialize<T>(T t)
{
using (StringWriter sw = new StringWriter())
{
XmlSerializer xz = new XmlSerializer(t.GetType());
xz.Serialize(sw, t);
return sw.ToString();
}
}
/// <summary>
/// 反序列化为对象
/// </summary>
/// <param name="type">对象类型</param>
/// <param name="s">对象序列化后的Xml字符串</param>
/// <returns></returns>
public static object Deserialize(Type type, string s)
{
using (StringReader sr = new StringReader(s))
{
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;
namespace ConsoleApplication2
{
[Serializable]
public class UserInfo
{
private int m_UserId;
[XmlElement("userId")]
public int UserId
{
get { return m_UserId; }
set { m_UserId = value; }
}
private string m_UserName;
[XmlElement("userName")]
public string UserName
{
get { return m_UserName; }
set { m_UserName = value; }
}
}
}
编写测试子程序:
复制 保存using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Program.TestOne();
Console.WriteLine(string.Empty);
Program.TestTwo();
Console.WriteLine(string.Empty);
Program.TestThree();
Console.WriteLine(string.Empty);
Program.TestFour();
}
public static void TestOne()
{
UserInfo info = new UserInfo() { UserId = 1, UserName = "Guozhijian" };
Console.WriteLine(SimpleSerializer.Serialize<UserInfo>(info));
}
public static void TestTwo()
{
List<UserInfo> list = new List<UserInfo>();
list.Add(new UserInfo() { UserId = 1, UserName = "Guozhijian" });
list.Add(new UserInfo() { UserId = 2, UserName = "Zhenglanzhen" });
Console.WriteLine(SimpleSerializer.Serialize<List<UserInfo>>(list));
}
public static void TestThree()
{
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()
{
List<UserInfo> list = new List<UserInfo>();
list.Add(new UserInfo() { UserId = 1, UserName = "Guozhijian" });
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)
{
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>
<?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>
1, Guozhijian
1, Guozhijian
2, Zhenglanzhen