创建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编码声明头、格式化保存和读写文件的功能。
领取专属 10元无门槛券
私享最新 技术干货