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/)
相关推荐
明耀27 分钟前
WPF RadioButton 绑定boolean值
c#·wpf
郭二哈38 分钟前
C++——list
开发语言·c++·list
海绵波波1072 小时前
Qt操作主/从视图及XML——实例:汽车管理系统
xml·qt·汽车
Death2002 小时前
Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
c语言·开发语言·c++·qt·c#
Death2003 小时前
Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
c语言·c++·qt·3d·c#
yufei-coder3 小时前
C#基础语法
开发语言·c#·.net
yngsqq3 小时前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#
CHICX12297 小时前
【Hadoop】改一下core-site.xml和hdfs-site.xml配置就可以访问Web UI
xml·大数据·hadoop
新手unity自用笔记18 小时前
项目-坦克大战学习-子弹的移动与销毁
笔记·学习·c#
qinzechen19 小时前
分享几个做题网站------学习网------工具网;
java·c语言·c++·python·c#