You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何XML反序列化Dictionary<string, List<string>>?遇CS0029错误

解决XML反序列化时的CS0029类型转换错误

CS0029错误的核心原因很明确:你把反序列化得到的CountriesAndCities对象直接赋值给了Dictionary<string, List>类型的变量,这两个类型完全不兼容,自然无法隐式转换。

修复方案

  • 修正反序列化赋值逻辑
    在button11_Click方法中,先将反序列化结果转换为CountriesAndCities类型,再提取其DictCountriesAndCities属性赋值给字典变量:

    原错误代码:

    dictCountryAndCities = serializer.Deserialize(reader) as CountriesAndCities;
    

    修改为:

    var deserializedContainer = serializer.Deserialize(reader) as CountriesAndCities;
    if (deserializedContainer != null)
    {
        dictCountryAndCities = deserializedContainer.DictCountriesAndCities;
    }
    
  • 优化容器类的健壮性
    对CountriesAndCities类做两处优化,避免空引用和语义混淆:

    1. 将模糊的Name属性重命名为Countries,更贴合其存储的内容
    2. 添加构造函数初始化DictCountriesAndCities,同时在属性setter中处理空值

    修改后的类代码:

    [Serializable]
    [XmlRoot("CountriesAndCities")]
    public class CountriesAndCities
    {
        public CountriesAndCities()
        {
            DictCountriesAndCities = new Dictionary<string, List<string>>();
        }
    
        public List<Country> Countries
        {
            get { return DictCountriesAndCities.Select(x => new Country { CountryName = x.Key, Cities = x.Value }).ToList(); }
            set { DictCountriesAndCities = value?.ToDictionary(x => x.CountryName, x => x.Cities) ?? new Dictionary<string, List<string>>(); }
        }
    
        [XmlIgnore]
        public Dictionary<string, List<string>> DictCountriesAndCities { get; set; }
    }
    
  • 添加空值保护
    反序列化可能返回null(比如文件损坏或格式错误),添加空值判断可以避免后续绑定ListBox时出现NullReferenceException。

内容的提问来源于stack exchange,提问作者alphabeta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:52:29