类为我们提供了自己对象串行化(Serialize)和反串行化(Deserialize)的xml的方法,该类可以序列化的内容:
公共类的公共读写字段或者属性
XmlElement对象
XmlNode对象
Dataset对象
实现了Icollection 或IEnumerable的类
该类在设计中有一个设计需求:
需要被序列化的类要提供一个空参数的构造函数,否则运行时会出现异常
在开发过程中可能会有很多地方要用到对象和XML相互转化,在此提供一个通用的类,提供泛类型的支持。
/// <summary>
/// 序列化帮助类
/// </summary>
public
class
SHelper
{
/// <summary>
/// 对象到XML-----泛类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public
static
string
SaveXmlFromObj<T>(T obj)
{
if
(obj ==
null
)
return
null
;
XmlSerializer serializer =
new
XmlSerializer(
typeof
(T));
MemoryStream stream =
new
MemoryStream();
XmlTextWriter xtw =
new
XmlTextWriter(stream,Encoding.UTF8);
xtw.Formatting = Formatting.Indented;
try
{
serializer.Serialize(stream,obj);
}
catch
{
return
null
; }
stream.Position = 0;
string
returnStr =
string
.Empty;
using
(StreamReader sr =
new
StreamReader(stream,Encoding.UTF8))
{
string
line =
""
;
while
((line = sr.ReadLine()) !=
null
)
{
returnStr += line;
}
}
return
returnStr;
}
/// <summary>
/// XML到反序列化到对象----支持泛类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <returns></returns>
public
static
T LoadObjFromXML<T>(
string
data)
{
using
(MemoryStream stream =
new
MemoryStream())
{
using
(StreamWriter sw =
new
StreamWriter(stream,Encoding.UTF8))
{
sw.Write(data);
sw.Flush();
stream.Seek(0,SeekOrigin.Begin);
XmlSerializer serializer =
new
XmlSerializer(
typeof
(T));
try
{
return
((T)serializer.Deserialize(stream));
}
catch
{
return
default
(T); }
}
}
}
}
|
该类提供两方法,一个是从实体到返回XML字符串的方法,一个是把XML字符串装成对象实体的方法。下面我们来看看这个类是怎么用的。
首先建两个类USer和Users,User测试一个实体的序列化和反序列化,USers测试一个List集合序列化和反序列化。注意这两个类都标注了[Serializable]特性,并且提供了空参数的构造函数。