C#实体类与XML互转以及List和DataTable转XML的使用

引言

在C#开发中,数据的存储和传输是非常常见的需求。使用XML作为数据格式有很多优点,例如可读性强、易于解析等。而实体类、List和DataTable是表示数据模型的常用方式。本文将介绍如何在C#中实现实体类、List和DataTable与XML之间的相互转换,帮助开发者处理数据的存储和交互。
C#实体类与XML互转以及List和DataTable转XML的使用_第1张图片


目录

  • 引言
    • 1. 将实体类对象转换为XML字符串
    • 2. 将XML字符串转换为实体类对象
    • 3. 将List转换为XML
    • 4. 将DataTable转换为XML
  • 结语


1. 将实体类对象转换为XML字符串

要实现将实体类对象转换为XML字符串,我们可以使用.NET框架提供的XmlSerializer类。以下是具体的步骤:

using System;
using System.IO;
using System.Xml.Serialization;

// 定义一个示例实体类
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建一个Person实例
        Person person = new Person()
        {
            Name = "Alice",
            Age = 25
        };

        // 创建XmlSerializer对象,并指定实体类型
        XmlSerializer serializer = new XmlSerializer(typeof(Person));

        // 创建一个StringWriter对象,用于写入XML字符串
        StringWriter writer = new StringWriter();

        // 调用Serialize方法将实体类对象转换为XML字符串
        serializer.Serialize(writer, person);

        // 获取XML字符串
        string xmlString = writer.ToString();

        // 输出XML字符串
        Console.WriteLine(xmlString);
    }
}

通过上述代码,我们可以将Person实例转换成如下的XML字符串:


<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Name>AliceName>
    <Age>25Age>
Person>

2. 将XML字符串转换为实体类对象

要实现将XML字符串转换为实体类对象,我们需要反向操作,即使用XmlSerializer类的Deserialize方法。以下是具体的步骤:

using System;
using System.IO;
using System.Xml.Serialization;

// 定义一个示例实体类
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        // 假设我们有以下XML字符串
        string xmlString = @"
                            
                                Alice
                                25
                            ";

        // 创建XmlSerializer对象,并指定实体类型
        XmlSerializer serializer = new XmlSerializer(typeof(Person));

        // 创建一个StringReader对象,用于读取XML字符串
        StringReader reader = new StringReader(xmlString);

        // 调用Deserialize方法将XML字符串转换为实体类对象
        Person person = (Person)serializer.Deserialize(reader);

        // 输出实体类对象的属性值
        Console.WriteLine($"Name: {person.Name}");
        Console.WriteLine($"Age: {person.Age}");
    }
}

通过上述代码,我们可以将XML字符串转换成一个Person实例,然后获取实体类对象的属性值。

3. 将List转换为XML

要将List对象转换为XML字符串,我们可以使用XmlSerializer类。以下是具体的步骤:

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

// 定义一个示例实体类
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建一个List实例
        List<Person> people = new List<Person>()
        {
            new Person() { Name = "Alice", Age = 25 },
            new Person() { Name = "Bob", Age = 30 },
            new Person() { Name = "Charlie", Age = 35 }
        };

        // 创建XmlSerializer对象,并指定实体类型
        XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));

        // 创建一个StringWriter对象,用于写入XML字符串
        StringWriter writer = new StringWriter();

        // 调用Serialize方法将List对象转换为XML字符串
        serializer.Serialize(writer, people);

        // 获取XML字符串
        string xmlString = writer.ToString();

        // 输出XML字符串
        Console.WriteLine(xmlString);
    }
}

通过上述代码,我们可以将List对象转换为如下的XML字符串:


<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Person>
    <Name>AliceName>
    <Age>25Age>
  Person>
  <Person>
    <Name>BobName>
    <Age>30Age>
  Person>
  <Person>
    <Name>CharlieName>
    <Age>35Age>
  Person>
ArrayOfPerson>

4. 将DataTable转换为XML

要将DataTable对象转换为XML字符串,我们同样可以使用XmlSerializer类。以下是具体的步骤:

using System;
using System.Data;
using System.IO;
using System.Xml.Serialization;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个DataTable实例
        DataTable dataTable = new DataTable();
        dataTable.Columns.Add("Name", typeof(string));
        dataTable.Columns.Add("Age", typeof(int));

        dataTable.Rows.Add("Alice", 25);
        dataTable.Rows.Add("Bob", 30);
        dataTable.Rows.Add("Charlie", 35);

        // 创建XmlSerializer对象,并指定实体类型
        XmlSerializer serializer = new XmlSerializer(typeof(DataTable));

        // 创建一个StringWriter对象,用于写入XML字符串
        StringWriter writer = new StringWriter();

        // 调用Serialize方法将DataTable对象转换为XML字符串
        serializer.Serialize(writer, dataTable);

        // 获取XML字符串
        string xmlString = writer.ToString();

        // 输出XML字符串
        Console.WriteLine(xmlString);
    }
}

通过上述代码,我们可以将DataTable对象转换为如下的XML字符串:


<DataTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="DataTable">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="Name" type="xs:string" minOccurs="0" />
                <xs:element name="Age" type="xs:int" minOccurs="0" />
              xs:sequence>
            xs:complexType>
          xs:element>
        xs:choice>
      xs:complexType>
    xs:element>
  xs:schema>
  <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <NewDataSet xmlns="">
      <DataTable diffgr:id="DataTable1" msdata:rowOrder="0">
        <Name>AliceName>
        <Age>25Age>
      DataTable>
      <DataTable diffgr:id="DataTable2" msdata:rowOrder="1">
        <Name>BobName>
        <Age>30Age>
      DataTable>
      <DataTable diffgr:id="DataTable3" msdata:rowOrder="2">
        <Name>CharlieName>
        <Age>35Age>
      DataTable>
    NewDataSet>
  diffgr:diffgram>
DataTable>

C#实体类与XML互转以及List和DataTable转XML的使用_第2张图片

结语

通过本文,我们了解了如何在C#中实现实体类、List和DataTable与XML之间的相互转换。这对于开发过程中的数据存储和交互非常有用。希望本文能帮助到你!

[参考文献]

  1. Microsoft Documentation: XmlSerializer Class (https://docs.microsoft.com/dotnet/api/system.xml.serialization.xmlserializer)
  2. C# XML to Object Example (https://www.c-sharpcorner.com/UploadFile/mahesh/xmltobject/)

你可能感兴趣的:(C#,c#,xml,list,datatable,实体类,xml转换)