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

引言

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


目录

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

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

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

csharp 复制代码
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字符串:

xml 复制代码
<?xml version="1.0" encoding="utf-16"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Name>Alice</Name>
    <Age>25</Age>
</Person>

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

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

csharp 复制代码
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 = @"<?xml version=""1.0"" encoding=""utf-16""?>
                            <Person xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
                                <Name>Alice</Name>
                                <Age>25</Age>
                            </Person>";

        // 创建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类。以下是具体的步骤:

csharp 复制代码
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<Person>实例
        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<Person>对象转换为如下的XML字符串:

xml 复制代码
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Person>
    <Name>Alice</Name>
    <Age>25</Age>
  </Person>
  <Person>
    <Name>Bob</Name>
    <Age>30</Age>
  </Person>
  <Person>
    <Name>Charlie</Name>
    <Age>35</Age>
  </Person>
</ArrayOfPerson>

4. 将DataTable转换为XML

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

csharp 复制代码
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字符串:

xml 复制代码
<?xml version="1.0" encoding="utf-16"?>
<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>Alice</Name>
        <Age>25</Age>
      </DataTable>
      <DataTable diffgr:id="DataTable2" msdata:rowOrder="1">
        <Name>Bob</Name>
        <Age>30</Age>
      </DataTable>
      <DataTable diffgr:id="DataTable3" msdata:rowOrder="2">
        <Name>Charlie</Name>
        <Age>35</Age>
      </DataTable>
    </NewDataSet>
  </diffgr:diffgram>
</DataTable>

结语

通过本文,我们了解了如何在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/)
相关推荐
向宇it13 分钟前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
坐井观老天5 小时前
在C#中使用资源保存图像和文本和其他数据并在运行时加载
开发语言·c#
pchmi7 小时前
C# OpenCV机器视觉:模板匹配
opencv·c#·机器视觉
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭9 小时前
C#都可以找哪些工作?
开发语言·c#
boligongzhu11 小时前
Dalsa线阵CCD相机使用开发手册
c#
云和数据.ChenGuang11 小时前
《XML》教案 第1章 学习XML基础
xml·java·学习
王·小白攻城狮·不是那么帅的哥·天文11 小时前
Java操作Xml
xml·java
向宇it1 天前
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
java·开发语言·unity·c#·游戏引擎·里氏替换原则
sukalot1 天前
windows C#-命名实参和可选实参(下)
windows·c#