范型对象序列化,最近在项目中用到XML序列化对象,
public class RemindSerialization
{
/// <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);
}
}
/// <summary>
/// 反序列化为对象数组(对象类型数组顺序和对应的XML顺序要一致)
/// </summary>
/// <param name="type">对象类型数组</param>
/// <param name="s">对象序列化后的Xml字符串</param>
/// <returns>对象数组</returns>
public static object[] Deserializes(Type[] type, string s)
{
string[] strs = s.Split(new char[] { '|' });
object[] ob = new object[10] ;
for (int i = 0; i < strs.Length; i++)
{
object o=Deserialize(type[i], strs[i]);
ob.SetValue(o, i);
}
return ob;
}
/// <summary>
/// 序列化对象数组(注意对象数组的顺序,反序列化时要遵循)
/// </summary>
/// <param name="t">对象数组</param>
/// <returns></returns>
public static string Serializes(object[] t)
{
string str = "";
for (int i = 0; i < t.Length; i++)
{
using (StringWriter sw = new StringWriter())
{
XmlSerializer xz = new XmlSerializer(t[i].GetType());
xz.Serialize(sw,t[i]);
str+= sw.ToString()+"|";
}
}
return str;
}
}