新闻中心

C# 如何从xml中反序列化出字典(Dictionary)

2025-10-31
浏览次数:
返回列表
C#中XML反序列化不直接支持Dictionary,需通过封装KeyValueItem列表实现。1. 定义Key、Value属性的KeyValueItem类;2. 创建包含List的SerializableDictionary类,并提供ToDictionary方法;3. XML结构需为......格式;4. 使用XmlSerializer反序列化后转换为Dictionary。此方法适用于简单键值场景,复杂类型可扩展或改用JSON方案。

c# 如何从xml中反序列化出字典(dictionary)

在 C# 中,XML 反序列化默认不直接支持 Dictionary 类型,因为 XML 没有原生的键值对结构。但你可以通过一些技巧来实现从 XML 中反序列化出字典。

使用 XmlSerializer 反序列化字典的常见方法

由于 XmlSerializer 不能直接处理 Dictionary 这样的类型,通常的做法是将字典包装在一个类中,并用自定义结构模拟键值对。

步骤如下:

1. 定义一个包含字典项的类

这个类用于表示字典中的每一项(键和值):

public class KeyValueItem
{
    public string Key { get; set; }
    public string Value { get; set; }
}

2. 定义一个包装类来存放字典数据

该类包含一个 KeyValueItem 的集合,用于反序列化:

using System.Collections.Generic;
using System.Xml.Serialization;

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

    // 提供一个属性,方便转换为 Dictionary<string, string>
    public Dictionary<string, string> ToDictionary()
    {
        return Items.ToDictionary(i => i.Key, i => i.Value);
    }
}

3. 准备符合结构的 XML 数据

Musho Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho

例如:

<Dictionary>
  <Item>
    <Key>name</Key>
    <Value>张三</Value>
  </Item>
  <Item>
    <Key>age</Key>
    <Value>25</Value>
  </Item>
</Dictionary>

4. 执行反序列化

代码示例:

using System;
using System.IO;
using System.Xml.Serialization;

class Program
{
    static void Main()
    {
        string xml = @"
<Dictionary>
  <Item>
    <Key>name</Key>
    <Value>张三</Value>
  </Item>
  <Item>
    <Key>age</Key>
    <Value>25</Value>
  </Item>
</Dictionary>";

        XmlSerializer serializer = new XmlSerializer(typeof(SerializableDictionary));
        using (StringReader reader = new StringReader(xml))
        {
            var result = (SerializableDictionary)serializer.Deserialize(reader);
            Dictionary dict = result.ToDictionary();

            foreach (var kvp in dict)
            {
                Console.WriteLine($"{kvp.Key}: {kvp.Value}");
            }
        }
    }
}

注意事项与扩展

这种方案适用于简单的键值对场景。如果需要支持复杂类型(如 Dictionary 或嵌套对象),可以:

  • 修改 KeyValueItem 中的 Value 类型为 object 或泛型
  • 使用 IXmlSerializable 接口实现完全自定义序列化逻辑
  • 考虑改用 JSON 格式(如 Newtonsoft.Json 或 System.Text.Json),它们天然支持字典

替代方案:使用第三方库

如果你可以引入外部库,Newtonsoft.Json 配合 JToken 或 LINQ to XML 可以更灵活地解析 XML 并转成字典,尤其是结构不固定时。

基本上就这些。C# 原生 XML 序列化对字典支持有限,但通过封装为列表+键值结构,就能顺利反序列化出来。

以上就是C# 如何从xml中反序列化出字典(Dictionary)的详细内容,更多请关注其它相关文章!


# 不直接  # 内黄移动网站建设  # 阿里怎么营销推广的  # 门户网站建设布局图纸  # 湘潭网站建设行业前景  # 化妆品网站的推广途径  # 2b工厂如何营销推广  # 金湖数据网站建设优化  # 恩施州网站建设优化  # 在上海网站建设费用  # 武汉潜水俱乐部网站建设  # 分片  # 客户端  # c#  # 重试  # 转换为  # 自定义  # 适用于  # 多线程  # 键值  # 序列化  # 键值对  # ai  # json  # js  # xml反序列化 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率  谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示  poki网页游戏推荐_poki免费游戏平台入口  漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道  c++中为什么推荐使用using替代typedef_c++现代化类型别名  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  Win10双系统截图高效法 截屏快捷键速记【技巧】  C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件  零跑汽车11月交付量达70327台 实现连续9个月正增长  zookeeper 都有哪些功能?  大象笔记网页版入口 印象笔记网页版登录入口  Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖  age动漫网站入口 age动漫官网直接访问入口  sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置  AO3最新官网入口公告_2025AO3镜像站实时查询方法  React/Next.js中实现列表项的动态选择与移动  如何在Promise链中优雅地中断后续then执行  海棠电脑版入口_通过电脑访问海棠官网阅读  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  企业名称高精度匹配:N-gram方法在结构相似性分析中的应用  动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  J*aScript map 迭代中检测空数组元素的有效方法  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符  AngularJS $http POST请求数据传递与Go后端接收实践  Typer应用中灵活处理命令行参数的令牌化与解析  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址  Win11怎么开启高性能模式_Windows 11电源计划优化设置  火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧  C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图  Safari自带网页翻译功能怎么用 无需插件轻松看懂外文网站【方法】  内存检查:在VS Code中调试C++时的内存视图  Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  高德地图公交到站提醒失败如何解决 高德提醒权限设置  构建轻量级网站内部消息系统:Formspree 集成指南  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  深入理解J*a合成构造器:何时以及为何阻止其生成  QQ网页版官方账号入口 QQ网页版网页版登录指南  微博网页版首页入口 微博电脑端官网登录链接  Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法  J*aScript中正确使用querySelectorAll与复杂CSS选择器  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  Archive of Our Own官网直达 AO3最新可用地址一览  J*a TimerTask中HashMap意外清空的深层原因与解决方案 

搜索