XML in C#

XML简介

XML与HTML一样是标记性语言,但XML语言仅用来标记数据。简而言之,标记性语言通过缩进来表现内部包含关系。XML逻辑上只用作记录一个集合或者单独一个类,不宜包含过多冗余内容。

XML Serialize Via C#

  1. Serialization
    首先引入库System.Xml.Serialization
    image
    我使用的是.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化,不需要特别声明。

  1. 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);

需要注意:当被序列化文件严格按照类的格式编写的化,这是最理想的情况,是不会出现报错的。但是如果有被序列化文件有冗余项时,按照最先匹配原则,匹配不上的标签将被抛弃。

posted @ 2022-07-05 09:43  none323  阅读(44)  评论(0)    收藏  举报