XML in C#
XML简介
XML与HTML一样是标记性语言,但XML语言仅用来标记数据。简而言之,标记性语言通过缩进来表现内部包含关系。XML逻辑上只用作记录一个集合或者单独一个类,不宜包含过多冗余内容。
XML Serialize Via C#
- Serialization
首先引入库System.Xml.Serialization

我使用的是.NET6的控制台程序,这个和最小API很相似,语法结构与传统面向对象语言很不相似,不得不说C#这部分越来越像Python等脚本语言了。
简而言之,最小api就是省去了main函数,写的代码都在main函数内。也是一种将Program封装解耦思想的体现。省去main之后,如果要在program类内定义自己的类也没法实现了,只能去新建类,再在program内引用。
点击查看代码
using ConsoleApp1;
using System.Xml.Serialization;
string path = @"D:\\test\\test1.txt";
var streamWriter = new StreamWriter(path);
var stu = new Student(10, "nihao", new Book(111, "yuwen"), new List<Book> { new Book(123, "no:123"), new Book(124, "no:124") });
XmlSerializer serializer = new XmlSerializer(typeof(Student));
serializer.Serialize(streamWriter, stu);
streamWriter.WriteLine();
streamWriter.Flush();
streamWriter.Close();
点击查看代码
[Serializable]
[XmlRoot]
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public Book Book;
public List<Book> Books;
public Student(int id, string name,Book book,List<Book> books)
{
Id = id;
Name = name;
Book = book;
Books = books;
}
public Student()
{
}
}
public class Book
{
public int Id { get; set; }
public string Name { get; set; }
public Book()
{
}
public Book(int id, string name)
{
Id=id;
Name = name;
}
}
需要注意的是,XML序列化库支持将单个类内部的类对象和集合对象XML化,不需要特别声明。
- Deserialization
点击查看代码
string path = @"D:\\test\\test1.txt";
var streamReader= new StreamReader(path);
var stream = streamReader.BaseStream;
XmlSerializer serializer = new XmlSerializer(typeof(Student));
Student student = (Student)serializer.Deserialize(stream);
Console.WriteLine(stream.ToString());
Console.WriteLine(student.Books[1].Name);
需要注意:当被序列化文件严格按照类的格式编写的化,这是最理想的情况,是不会出现报错的。但是如果有被序列化文件有冗余项时,按照最先匹配原则,匹配不上的标签将被抛弃。

浙公网安备 33010602011771号