Pri*_*ief 1 c# xml xml-parsing
我可以将此员工对象的信息写入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; } }
}
Run Code Online (Sandbox Code Playgroud)
写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>
Run Code Online (Sandbox Code Playgroud)
然后我想将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();
Run Code Online (Sandbox Code Playgroud)
请注意,目前尚未执行属性存在的任何验证.如果您需要更复杂的验证和构造,可以将查询更改为:
XDocument doc = XDocument.Load("employees.xml");
var employees = doc.Root.Elements("Employee")
.Select(Employee.FromXElement)
.ToList();
Run Code Online (Sandbox Code Playgroud)
哪里Employee.FromXElement是一个静态方法,它知道如何从一个创建一个Employee的细节XElement.然后,您可能需要一个实例方法ToXElement来执行反向操作.我之前使用过这种模式,并且取得了很大的成功.
虽然你可以肯定使用XML序列化,我觉得这往往比"定制"系列化不够灵活,在输出它可以产生,输入可以接受的条款,让您应付不断变化的数据集合类型.正如Darin所示,它还对类型提出了各种要求,这些要求可能与您设计的其他部分不相符 - 例如您不可避免的不可变电流类型.
另一方面,内置的XML序列化将更好地应对参照完整性等问题.
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |