跳转到主内容
极星编程网:以代码为星,赴技术山海!

C# 如何将字典(Dictionary)序列化为xml

使用包装类可实现C#字典序列化为XML,通过SerializableDictionary封装键值对,结合XmlSerializer完成序列化与反序列化,避开Dictionary不支持直接序列化的限制。

在C#中,要将字典(Dictionary)序列化为XML,不能直接使用XmlSerializer对 Dictionary 类型进行序列化,因为 Dictionary 不支持默认的 XML 序列化机制。但可以通过一些变通方式实现,比如封装字典或使用自定义类。

1. 使用包装类进行序列化

创建一个可序列化的类来包装字典的键值对,这是最常见且可靠的方法。

public class SerializableDictionary{public List> Items { get; set; } = new List>();}

使用示例:

var dict = new Dictionary{{ "Name", "Alice" },{ "Age", "25" },{ "City", "Beijing" }};

var serializableDict = new SerializableDictionary();foreach (var kvp in dict){serializableDict.Items.Add(kvp);}

var serializer = new XmlSerializer(typeof(SerializableDictionary));using (var writer = new StringWriter()){serializer.Serialize(writer, serializableDict);string xml = writer.ToString();Console.WriteLine(xml);}

2. 使用特性控制XML输出格式

可以进一步优化输出结构,让XML更清晰。

[XmlRoot("Dictionary")]public class SerializableDictionary{[XmlElement("Item")]public List Items { get; set; } = new List();}

public class DictionaryItem{[XmlAttribute("Key")]public string Key { get; set; }

[XmlAttribute("Value")]public string Value { get; set; }}

转换时:

C函数速查手册(CHM版)

C函数速查手册(CHM版)

下载var serializableDict = new SerializableDictionary();foreach (var kvp in dict){serializableDict.Items.Add(new DictionaryItem { Key = kvp.Key, Value = kvp.Value });}

生成的XML会类似:

3. 反序列化还原字典

如果需要从XML还原为 Dictionary,同样使用 XmlSerializer 反向操作即可。

using (var reader = new StringReader(xml)){var result = (SerializableDictionary)serializer.Deserialize(reader);var dict = result.Items.ToDictionary(i => i.Key, i => i.Value);}基本上就这些。通过封装和合理设计类结构,就能顺利实现 Dictionary 到 XML 的序列化与反序列化。关键是避开原生 Dictionary 的序列化限制。不复杂但容易忽略细节。

相关文章