我可以将这个员工对象的信息写入 XML 文件。看起来像这样。
员工类
class Employee
{
int _id;
string _firstName;
string _lastName;
int _salary;
string _text;
public Employee(int id, string firstName, string lastName, int salary,string text)
{
this._id = id;
this._firstName = firstName;
this._lastName = lastName;
this._salary = salary;
this._text = text;
}
public int Id { get { return _id; } }
public string FirstName { get { return _firstName; } }
public string LastName { get { return _lastName; } }
public int Salary { get { return _salary; } }
public string Text { get { return _text; } }
}
编写Xml。
<Employees>
<Employee Text="text1">
<ID>1</ID>
<FirstName>David</FirstName>
<LastName>Smith</LastName>
<Salary>10000</Salary>
</Employee>
<Employee Text="text2">
<ID>3</ID>
<FirstName>Mark</FirstName>
<LastName>Drinkwater</LastName>
<Salary>30000</Salary>
</Employee>
<Employees>
然后我想将 xml 解析回 Employee 对象,最好的解决方案是什么?
最佳答案
就个人而言,我会使用 LINQ to XML:
XDocument doc = XDocument.Load("employees.xml");
var employees = doc.Root.Elements("Employee")
.Select(e => new Employee(
(int) e.Attribute("ID"),
(string) e.Attribute("FirstName"),
(string) e.Attribute("LastName"),
(int) e.Attribute("Salary"))
.ToList();
请注意,这目前不执行任何属性存在的验证。如果您需要更复杂的验证和构建,您可以将查询更改为:
XDocument doc = XDocument.Load("employees.xml");
var employees = doc.Root.Elements("Employee")
.Select(Employee.FromXElement)
.ToList();
其中 Employee.FromXElement
是一个静态方法,它知道如何从 XElement
创建 Employee 的详细信息。然后,您可能需要 ToXElement
的实例 方法来执行反向操作。我以前使用过这种模式并取得了巨大成功。
虽然您当然可以使用 XML 序列化,但我发现这往往不如“自定义”序列化灵活,就它可以产生的输出、它可以接受的输入以及允许您以应对类型中不断变化的数据集。正如 Darin 所展示的,它还对类型提出了各种要求,这些要求可能不适合您设计的其余部分 - 例如您令人愉快的不可变当前类型。
另一方面,内置的 XML 序列化将更好地处理引用完整性等问题。
关于C# : The best solution to parse the xml file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4766898/