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");
我正在创建一个程序,用于在 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");