编辑
2025-09-24
C#
00

目录

摘要
正文

摘要

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; } }

序列化与反序列化

image.png

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"); }

image.png

注:对于用XML进行序列化的情况,[NonSerialized]特性不起作用,得用[XmlIgnore]

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!