C#是一种广泛使用的面向对象编程语言,XML序列化是C#编程中的一个重要概念。XML序列化是将对象的状态转换为XML格式的过程,以便于数据的传输和存储。C#提供了一个名为XmlSerializer的类来实现XML序列化和反序列化。
XmlSerializer类是C#中最常用的类之一,它可以将对象序列化为XML格式,也可以将XML格式的数据反序列化为对象。XmlSerializer类有许多方法可以使用,但其中最重要的两个方法是Serialize和Deserialize方法。
我们先写一个Helper类
C#public class XmlHelper
{
/// <summary>
/// 写文件
/// </summary>
/// <param name="obj"></param>
/// <param name="filename"></param>
/// <returns></returns>
public bool Save(string filename)
{
try
{
if (File.Exists(filename))
{
File.Delete(filename);
}
FileStream stream = new FileStream(filename, FileMode.Create);
XmlSerializer xml = new XmlSerializer(this.GetType());
xml.Serialize(stream, this);
stream.Close();
}
catch (Exception ex)
{
return false;
}
return true;
}
/// <summary>
/// 将文件转换为对像
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public static void Load<T>(ref T t, string filename)
{
if (!File.Exists(filename))
{
return;
}
FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
XmlSerializer xml = new XmlSerializer(typeof(T));
t = (T)xml.Deserialize(stream);
stream.Close();
}
}
创建一个设备类
C#[Serializable]
public class Equipment : XmlHelper
{
public string Name { get; set; }
public string Description { get; set; }
public string Owner { get; set; }
public List<Material> Materials { get; set; }
[XmlIgnore]
public int Period;
}
public class Material
{
public string Name { get; set; }
public int Qty { get; set; }
}
序列化与反序列化
C#Equipment equipment;
private void init()
{
equipment = new Equipment();
equipment.Name = "设备1";
equipment.Description = "这是一个测试设备";
equipment.Owner = "张三";
equipment.Materials = new List<Material>()
{
new Material()
{
Name="6ES001",
Qty=1
},
new Material()
{
Name="6ES002",
Qty=2
},
};
}
private void btnSerialize_Click(object sender, EventArgs e)
{
equipment.Save("./x.xml");
}
private void btnDeserialize_Click(object sender, EventArgs e)
{
Equipment equipment1 = new Equipment();
Equipment.Load(ref equipment1, "./x.xml");
}
注:对于用XML进行序列化的情况,[NonSerialized]
特性不起作用,得用[XmlIgnore]
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!