admin管理员组文章数量:1487745
c#复杂XML反序列化为实体对象两种方式
在C#开发中,我们经常需要处理XML数据,将其转换为实体对象。这个过程称为反序列化。反序列化XML可以采用多种方式,但主要有两种常见的方法:使用XmlSerializer
和使用DataContractSerializer
。本文将详细介绍这两种方法,并提供示例代码。
使用XmlSerializer
进行反序列化
XmlSerializer
是.NET Framework提供的一个类,用于将XML数据反序列化为对象。这种方法适用于静态类型的XML数据,即XML结构在编译时已经确定。
基本用法
首先,你需要定义一个与XML结构相匹配的C#类。然后,使用XmlSerializer
来反序列化XML数据。
using System;
using System.IO;
using System.Xml.Serialization;
[XmlRoot("Person")]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
string xmlData = @"<Person><Name>John Doe</Name><Age>30</Age></Person>";
XmlSerializer serializer = new XmlSerializer(typeof(Person));
using (StringReader reader = new StringReader(xmlData))
{
Person person = (Person)serializer.Deserialize(reader);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
在这个示例中,我们定义了一个Person
类,并使用XmlSerializer
将XML字符串反序列化为Person
对象。
处理复杂XML
对于复杂的XML数据,你可能需要定义多个类来表示不同的XML节点。
代码语言:javascript代码运行次数:0运行复制using System;
using System.IO;
using System.Xml.Serialization;
[XmlRoot("Employees")]
public class Employees
{
[XmlElement("Employee")]
public Employee[] EmployeeList { get; set; }
}
public class Employee
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Age")]
public int Age { get; set; }
}
class Program
{
static void Main()
{
string xmlData = @"<Employees><Employee><Name>John Doe</Name><Age>30</Age></Employee></Employees>";
XmlSerializer serializer = new XmlSerializer(typeof(Employees));
using (StringReader reader = new StringReader(xmlData))
{
Employees employees = (Employees)serializer.Deserialize(reader);
foreach (var employee in employees.EmployeeList)
{
Console.WriteLine($"Name: {employee.Name}, Age: {employee.Age}");
}
}
}
}
在这个示例中,我们定义了一个Employees
类来表示包含多个Employee
的集合,并使用XmlSerializer
反序列化XML数据。
使用DataContractSerializer
进行反序列化
DataContractSerializer
是另一种用于反序列化XML数据的.NET类。它适用于动态类型的XML数据,即XML结构在运行时可能发生变化。
基本用法
与XmlSerializer
类似,你需要定义一个与XML结构相匹配的C#类,并使用DataContractSerializer
来反序列化XML数据。
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Xml;
[DataContract]
public class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
class Program
{
static void Main()
{
string xmlData = @"<Person xmlns:i=''><Name>John Doe</Name><Age>30</Age></Person>";
DataContractSerializer serializer = new DataContractSerializer(typeof(Person));
using (StringReader reader = new StringReader(xmlData))
using (XmlReader xmlReader = XmlReader.Create(reader))
{
Person person = (Person)serializer.ReadObject(xmlReader);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
在这个示例中,我们定义了一个Person
类,并使用DataContractSerializer
将XML字符串反序列化为Person
对象。
处理复杂XML
对于复杂的XML数据,DataContractSerializer
同样可以处理。
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Xml;
[DataContract]
public class Employees
{
[DataMember]
public Employee[] EmployeeList { get; set; }
}
[DataContract]
public class Employee
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
class Program
{
static void Main()
{
string xmlData = @"<Employees xmlns:i=''><Employee><Name>John Doe</Name><Age>30</Age></Employee></Employees>";
DataContractSerializer serializer = new DataContractSerializer(typeof(Employees));
using (StringReader reader = new StringReader(xmlData))
using (XmlReader xmlReader = XmlReader.Create(reader))
{
Employees employees = (Employees)serializer.ReadObject(xmlReader);
foreach (var employee in employees.EmployeeList)
{
Console.WriteLine($"Name: {employee.Name}, Age: {employee.Age}");
}
}
}
}
在这个示例中,我们定义了一个Employees
类来表示包含多个Employee
的集合,并使用DataContractSerializer
反序列化XML数据。
性能考量
在选择使用XmlSerializer
还是DataContractSerializer
时,性能是一个重要的考虑因素。DataContractSerializer
通常比XmlSerializer
更快,特别是在处理大型或复杂的XML文档时。然而,XmlSerializer
在处理具有特定XML结构的数据时可能更灵活。
本文标签: c复杂XML反序列化为实体对象两种方式
版权声明:本文标题:c#复杂XML反序列化为实体对象两种方式 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/shuma/1754908788a3181141.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论