1.对象和xml的序列化和反序列化:
先随便建一个实体类
public class Person
{
public Person()
{
}
public Person(string name, int age)
{
Name = name;
Age = age;
}
public string Name { get; set; }
public int Age { get; set; }
public DateTime LastLoginTime { get; set; }
public List<Course> Courses = new List<Course>();
}
public class Course
{
public Course()
{
}
public Course(string name, string description)
{
Name = name;
Description = description;
}
public string Name
{
get;
set;
}
public string Description
{
get;
set;
}
}
??对象和xml序列化和反序列化方法
/// <summary>
/// 序列化
/// </summary>
/// <param name="filePath"></param>
public static void Serialiaze(String filePath)
{
Person c = new Person("James Chen",35);
c.Courses.Add(new Course("高等数学", "思维工具"));
c.Courses.Add(new Course("大学英语", "交流工具"));
c.Courses.Add(new Course("离散数学", "计算机理论"));
XmlSerializer xs = new XmlSerializer(typeof(Person));
Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
xs.Serialize(stream, c);
stream.Close();
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="filePath"></param>
public static void Deserialize(String filePath)
{
XmlSerializer xs = new XmlSerializer(typeof(Person));
Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Person p = (Person)xs.Deserialize(stream);
stream.Close();
}
?调用方法
string path = Server.MapPath("upload/test.xml");
Serializer.Serialiaze(path);
Serializer.Deserialize(path);
?
2.字符串和对象的序列化和反序列化
/// <summary>
/// 序列化 对象到字符串
/// </summary>
/// <param name="obj">泛型对象</param>
/// <returns>序列化后的字符串</returns>
public static string Serialize<T>(T obj)
{
try
{
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, obj);
stream.Position = 0;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
stream.Flush();
stream.Close();
return Convert.ToBase64String(buffer);
}
catch (Exception ex)
{
throw new Exception("序列化失败,原因:" + ex.Message);
}
}
/// <summary>
/// 反序列化 字符串到对象
/// </summary>
/// <param name="obj">泛型对象</param>
/// <param name="str">要转换为对象的字符串</param>
/// <returns>反序列化出来的对象</returns>
public static T Desrialize<T>(T obj, string str)
{
try
{
obj = default(T);
IFormatter formatter = new BinaryFormatter();
byte[] buffer = Convert.FromBase64String(str);
MemoryStream stream = new MemoryStream(buffer);
obj = (T)formatter.Des