C# 通过 XmlSerializer 将类进行序列化和反序列化 保存XML
/// <summary>
/// 获取List<T>/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="path"></param>
/// <returns></returns>
public static List<T> GetControlList<T>(string path)
{
try
{
List<T> list;
if (!File.Exists(path))
{
list = new List<T>();
SaveTToXml<T>(list, path);
return list;
}
if (File.GetAttributes(path).ToString().Contains(FileAttributes.ReadOnly.ToString()))
{
File.SetAttributes(path, FileAttributes.Normal);
}
StreamReader streamReader = new StreamReader(path);
XmlSerializer xmlserializer = new XmlSerializer(typeof(List<T>));
object obj = xmlserializer.Deserialize(streamReader);
streamReader.Close();
list = (List<T>)obj;
return list;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 保存List<T>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="path"></param>
public static void SaveTToXml<T>(List<T> list, string path)
{
try
{
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xml = new XmlSerializer(typeof(List<T>));
xml.Serialize(memoryStream, list);
memoryStream.Position = 0;
XmlDocument ScreenWall = new XmlDocument();
ScreenWall.Load(memoryStream);
memoryStream.Close();
ScreenWall.Save(path);
}
catch (Exception ex)
{
}
}
/// <summary>
/// 添加 T 到XML中
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="path"></param>
public static void AddTToXml<T>(T obj, string path)
{
try
{
List<T> screenWalllist = GetControlList<T>(path);
if (screenWalllist != null)
{
screenWalllist.Add(obj);
}
else
{
screenWalllist = new List<T>();
screenWalllist.Add(obj);
}
SaveTToXml<T>(screenWalllist, path);
}
catch (Exception ex)
{
}
}