首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实现工具类XML文件的序列化读写

创建WPF项目:

- 打开Visual Studio,新建一个WPF应用程序项目,命名为 XmlSerializationToolWpf 。

创建工具类:

- 在项目中创建一个 XmlSerializationHelper.cs 文件,用于实现XML序列化和反序列化的工具方法。

using System;

using System.IO;

using System.Text;

using System.Xml;

using System.Xml.Serialization;

namespace XmlSerializationToolWpf

{

  public class XmlSerializationHelper

  {

      /// <summary>

      /// 将对象序列化为XML文件

      /// </summary>

      /// <typeparam name="T">对象类型</typeparam>

      /// <param name="obj">要序列化的对象</param>

      /// <param name="fileName">保存的文件名</param>

      public static void SerializeToXml<T>(T obj, string fileName)

      {

          var serializer = new XmlSerializer(typeof(T));

          // 使用UTF - 8编码并添加BOM头

          var encoding = new UTF8Encoding(true);

          using (var writer = new StreamWriter(fileName, false, encoding))

          {

              // 添加XML编码声明头

              writer.Write("<?xml version=\"1.0\" encoding=\"utf - 8\"?>");

              // 使用XmlWriterSettings来实现格式化输出

              var settings = new XmlWriterSettings

              {

                  Indent = true,

                  IndentChars = "\t",

                  NewLineChars = "\n",

                  NewLineHandling = NewLineHandling.Replace

              };

              using (var xmlWriter = XmlWriter.Create(writer, settings))

              {

                  var namespaces = new XmlSerializerNamespaces();

                  namespaces.Add("", "");

                  serializer.Serialize(xmlWriter, obj, namespaces);

              }

          }

      }

      /// <summary>

      /// 从XML文件反序列化为对象

      /// </summary>

      /// <typeparam name="T">对象类型</typeparam>

      /// <param name="fileName">要读取的文件名</param>

      /// <returns>反序列化后的对象</returns>

      public static T DeserializeFromXml<T>(string fileName)

      {

          var serializer = new XmlSerializer(typeof(T));

          using (var reader = new StreamReader(fileName, Encoding.UTF8))

          {

              return (T)serializer.Deserialize(reader);

          }

      }

  }

}

在WPF界面中使用工具类:

- 在 MainWindow.xaml 中设计简单的界面:

<Window x:Class="XmlSerializationToolWpf.MainWindow"

      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      Title="XML序列化和反序列化工具" Height="350" Width="525">

  <Grid>

      <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">

          <Button Content="序列化为XML" Click="SerializeButton_Click"/>

          <Button Content="从XML反序列化" Click="DeserializeButton_Click"/>

      </StackPanel>

  </Grid>

- 在 MainWindow.xaml.cs 中编写按钮点击事件处理代码:

using System;

using System.Windows;

using XmlSerializationToolWpf.Models;

namespace XmlSerializationToolWpf

{

  public partial class MainWindow : Window

  {

      public MainWindow()

      {

          InitializeComponent();

      }

      private void SerializeButton_Click(object sender, RoutedEventArgs e)

      {

          // 创建一个复杂对象实例

          var person = new Person

          {

              Name = "Bob",

              Age = 25,

              Hobbies = new string[] { "Music", "Sports" }

          };

          XmlSerializationHelper.SerializeToXml(person, "person.xml");

          MessageBox.Show("对象已成功序列化为XML文件。");

      }

      private void DeserializeButton_Click(object sender, RoutedEventArgs e)

      {

          try

          {

              var person = XmlSerializationHelper.DeserializeFromXml<Person>("person.xml");

              MessageBox.Show($"姓名: {person.Name}, 年龄: {person.Age}, 爱好: {string.Join(", ", person.Hobbies)}");

          }

          catch (Exception ex)

          {

              MessageBox.Show($"反序列化出错: {ex.Message}");

          }

      }

  }

}

using System;

using System.Xml.Serialization;

namespace XmlSerializationToolWpf.Models

{

  [Serializable]

  public class Person

  {

      public string Name { get; set; }

      public int Age { get; set; }

      public string[] Hobbies { get; set; }

  }

}

代码说明

-  XmlSerializationHelper 类:

-  SerializeToXml 方法:接受一个对象和文件名,将对象序列化为XML文件。使用 UTF - 8 编码并添加BOM头,手动添加XML编码声明头,通过 XmlWriterSettings 实现格式化输出。

-  DeserializeFromXml 方法:从指定的XML文件中读取数据并反序列化为指定类型的对象。

- WPF界面:

-  MainWindow.xaml 定义了两个按钮,分别用于触发序列化和反序列化操作。

通过以上步骤,就实现了使用WPF编写工具类进行对象的XML序列化和反序列化,包括文件编码设置、XML编码声明头、格式化保存和读写文件的功能。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OYWMr2OzS83foJgBoHorja1A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券