C#如何将Dictionary序列化为XML

admin 百科 16
C#中Dictionary不能直接用XmlSerializer序列化,需转为可序列化结构;推荐用带XmlElement的SerializableDictionary包装类,或用DataContractSerializer(支持泛型但XML冗余),也可转List轻量处理。

C#如何将Dictionary序列化为XML-第1张图片-佛山资讯网

C# 中 Dictionary<k></k> 不能直接用 XmlSerializer 序列化,因为 XmlSerializer 要求类型具有公共无参构造函数、公共读写属性,且不支持泛型字典的直接映射。需转换为可序列化的结构(如数组、列表或自定义包装类)后再处理。

使用包装类 + XmlSerializer(推荐)

定义一个包含 KeyValuePair<k></k> 列表的容器类,让 XmlSerializer 能识别并生成标准 XML:

  • 创建如 SerializableDictionary<k></k> 类,内部用 List<keyvaluepair>></keyvaluepair> 存储数据
  • 提供 ToDictionary()FromDictionary() 方法实现双向转换
  • KeyValuePair 的 Key/Value 添加 [XmlElement] 特性(注意:.NET 6+ 可直接序列化 KeyValuePair,旧版本建议封装为独立属性类)

示例关键代码:

[XmlRoot("Dictionary")]
public class SerializableDictionary<K, V>
{
    [XmlElement("Item")]
    public List<DictionaryEntry> Items { get; set; } = new();
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">public SerializableDictionary() { }
public SerializableDictionary(Dictionary<K, V> dict)
{
    foreach (var kvp in dict)
        Items.Add(new DictionaryEntry(kvp.Key, kvp.Value));
}

public Dictionary<K, V> ToDictionary() => 
    Items.ToDictionary(x => (K)x.Key, x => (V)x.Value);

登录后复制

}

public class DictionaryEntry { [XmlElement("Key")] public object Key { get; set; } [XmlElement("Value")] public object Value { get; set; public DictionaryEntry() { } public DictionaryEntry(object key, object value) => (Key, Value) = (key, value); }

用 DataContractSerializer(支持泛型字典)

DataContractSerializer 原生支持 Dictionary<k></k>,无需额外包装,但生成的 XML 带命名空间和冗余结构(如 <keyvalueofstringstring></keyvalueofstringstring>),可读性较差:

标签: ai 常见问题 c# .net

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~