c# 在 xml 中存储数据 - 如何读取和写入它

c# storing data in xml - how to read and write to it

我正在创建一个程序,用于在 rota/schedule 中分配班次,直到现在我一直在使用硬编码 class,其中包含其中人员的记录.

我现在正在寻找正确存储数据的方法,并且认为 xml 可能是一个很好的方法。

我有一个 class Person,其中包含此人的信息,还有一个 class MyDataSource,它创建了 Person class 并将它们存储在我可以添加或删除的列表中。

我一直在考虑使用消毒来读取和写入 xml 文件,但我很难理解它。

我应该能够将代码添加到我现有的 Person class 还是我需要创建一个单独的 class 来执行此操作?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;


namespace ShiftSorter
{
    public class Person
    {
        public string name { get; set; }
        public int hours { get; set; }
        public int row { get; set; }
        public string unit { get; set; }

        /// <summary>
        /// Creates a new instance of the object Person.
        /// </summary>
        /// <param name="newName">The name of the person</param>
        public Person(string newName)
        {
            name = newName;
        }
    }
}

首先,您的 class 应该是可序列化的:

using System.Xml.Serialization;

[Serializable]
public class Person { }

其次,您需要创建空构造函数,仅用于 XML 解析:

// Default constructor for serialization
public Person() { }

从现在开始,每个 public 字段都将通过以下方法进行序列化-反序列化:

private void Serialize()
{
    using (FileStream fs = new FileStream("person.xml", FileMode.Create))
    {
        XmlSerializer serializer = new XMLSerializer(typeof(Person));
        serializer.Serialize(fs, this);
    }
}

public static Person Deserialize(string filename = "person.xml")
{
    using (FileStream fs = new FileStream(filename, FileMode.Open))
    {
        XmlSerializer serializer = new XMLSerializer(typeof(Person));
        return (Person)serializer.Deserialize(fs);
    }
}

您可以通过以下方式从文件创建 class:

Person person = Person.Deserialize("person.xml");