一、PocoEmit集合扩展中支持字典

  • 支持字典互转
  • 支持数组转字典(索引转化为字典主键)
  • 支持列表转字典(索引转化为字典主键)

默认集合功能不支持实体属性转字典

为此开发了以下字典增强功能来实现实体转字典

二、实体和字典互转

1. ToDictionary

实体成员转化为object字典

User user = new() { Id = 3, Name = "张三" };
IDictionary<string, object> dic = _mapper.ToDictionary(user);

2. GetToDictionaryFunc

实体成员转化为object字典

var func = _mapper.GetToDictionaryFunc<User>();
User user = new() { Id = 3, Name = "张三" };
IDictionary<string, object> dic = func(user);

3. FromDictionary

object字典转化为实体

Dictionary<string, object> dic = new() { { nameof(User.Id), "3" }, { nameof(User.Name), "张三" } };
User user = _mapper.FromDictionary<User>(dic);

4. GetFromDictionaryFunc

object字典转化为实体

var func = _mapper.GetFromDictionaryFunc<User>();
Dictionary<string, object> dic = new() { { nameof(User.Id), "3" }, { nameof(User.Name), "张三" } };
User user = func(dic);

三、实体属性平铺

1. CreateDictionaryConvertFunc

  • 委托编译生成,重复使用需要缓存
  • 递归转化指定类型成员为字典
  • 支持同类型字典
  • 不支持数组和其他集合
  • 相当于彻底平铺展开
var func = _mapper.CreateDictionaryConvertFunc<Student, Dictionary<string, int>>();
Student source = new()
{
User = new() { Id = 2, Name = "Jxj" },
Age = 17,
Score = new() { { "语文", 95 }, { "数学", 96 } }
};
Dictionary<string, int> result = func(source);
// result.Count == 4

6. CreateDictionaryConvertFunc重载方法

  • 委托编译生成,重复使用需要缓存
  • 递归转化指定类型成员为字典
  • 支持同类型字典
  • 不支持数组和其他集合
  • 相当于彻底平铺展开
var func = _mapper.CreateDictionaryConvertFunc<Student, int, IDictionary<string, string>>();
Student source = new()
{
User = new() { Id = 2, Name = "Jxj" },
Age = 17,
Scores = new() { { "语文", 95 }, { "数学", 96 } }
};
IDictionary<string, string> result = func(source);
// result.Count == 4

源码托管地址: https://github.com/donetsoftwork/MyEmit ,也欢迎大家直接查看源码。

gitee同步更新:https://gitee.com/donetsoftwork/MyEmit

如果大家喜欢请动动您发财的小手手帮忙点一下Star。

PocoEmit字典增强功能的更多相关文章

  1. virtualbox安装增强功能时【未能加载虚拟光盘】

    virtualbox安装增强功能时[未能加载虚拟光盘] 今天在使用Virtualbox中的Ubuntu虚拟机,想安装增强功能来实现更改分辨率,但是在安装时出错:未能加载虚拟光驱 VBoxsGuestA ...

  2. virtualbox安装增强功能(centos6.5)

    vitualbox安装增强功能(centos 6.5) 1. 安装依赖包 #yum install kernel-headers-$(uname -r) #yum install kernel-dev ...

  3. VirtualBox-Linux系统安装增强功能

    我们在安装之前,必须得先安装好它所需要的依赖包,不然安装过程必定会出现错误! 一.安装依赖包 #yum install kernel-headers #yum install kernel-devel ...

  4. 安装Virtual Box增强功能 - Ubuntu

    一.开发环境 操作系统:Windows 7Virtual Box 版本: 5.0.10 虚拟机系统: Ubuntu 12.04 LTS 二.问题 进入Ubuntu图形界面后,选择“设备” --> ...

  5. VirtualBox CentOS安装增强功能与设置共享文件夹

    如果安装的是CentOS minimal版无网络的可以看这篇文章. 一.安装依赖环境 依次执行如下命令 yum install update yum install kernel-headers yu ...

  6. Graphtree--zabbix增强功能(一屏展示所有内容)

    Graphtree--zabbix增强功能 Graphtree由OneOaaS开发并开源出来. 功能 集中展示所有分组设备 集中展示一个分组图像 集中展示一个设备图像 展示设备下的Applicatio ...

  7. 为VirtualBox里的Linux系统安装增强功能

    先说下为什么要安装增强功能, 很重要的原因是分辨率,没有安装增强功能的虚拟机里的系统往往不能全屏的,屏幕显示的内容没有充满整个屏幕. 还有主机和客户机之间共享文件夹也需要客户机的系统安装了增强功能. ...

  8. WPF4.5 中的新增功能和增强功能的信息

    本主题包含有关 Windows Presentation Foundation (WPF) 版本 4.5 中的新增功能和增强功能的信息. 本主题包含以下各节: 功能区控件 改善性能,当显示大时设置分组 ...

  9. Debian 7 安装使用 Virtualbox及增强功能

    一.安装virtualbox 可以从源里安装 sudo apt-get install virtualbox 也可以下载最新版安装 https://www.virtualbox.org/wiki/Do ...

  10. 【运维手记】virtualbox中centOS安装增强功能

    在virtualbox安装了centOS,想安装增强功能时,系统提示: building the main Guest Additions module Failed 于是尝试了以下两步操作: (1) ...

随机推荐

  1. SQL Server高级进阶之索引碎片维护

    SELECT OBJECT_SCHEMA_NAME(B.OBJECT_ID) 架构,OBJECT_NAME(B.OBJECT_ID) 表名,B.NAME 索引名,ROUND(A.AVG_FRAGMEN ...

  2. C# 通过 HttpClient 上传图片 POST

    public string PostUploadImage(string uploadUrl, string imgPath, string fileparameter = "file&qu ...

  3. 学习spring cloud记录7-nacos服务分级存储模型

    前言 添加集群,级别分别为服务--集群--实例. 配置集群 可在配置文件中添加以下配置设置该服务的集群 cloud: nacos: server-addr: localhost:8848 # naco ...

  4. 高级 JAVA 工程师卷 1

    高级 JAVA 工程师卷 1 一.选择题 1.在分布式系统中,关于 CAP  定理,以下说法正确的是( A) A.  一致性(Consistency).可用性(Availability)和分区容错性( ...

  5. mac如何卸载飞连

    当我们在[应用程序]下面把飞连移到废纸篓时,会提示被锁定无法删除 我们需要先把软件解锁,执行以下命令, 再移到废纸篓即可 sudo /usr/bin/chflags -R noschg /Applic ...

  6. 在esm中优雅的使用__dirname

    在esm中没有这些 __dirname.require,因为这是cjs的规范. 但是通过如下代码,你即可使用上 import path from "node:path"; impo ...

  7. 不支持tpm2.0 升级windows11

    前提 我计划给我的macbook pro2020装双系统 但是双击启动转换助理 看到只能装windows10,只好手动选择下载好的win11镜像,则提示驱动软件失败TMDDD 那我就先用启动转换助理安 ...

  8. openwrt helloworld

    转载http://blog.csdn.net/hui523hui523hui523/article/details/38366427 新的见解 https://forum.openwrt.org/vi ...

  9. Android计算两个日期相差天数

    概述 因为没有现成的函数方法可用,那就通过一个循环来取得相差的天数了 Calendar curcalendar= Calendar.getInstance(); int days = 0; //定义一 ...

  10. API自动化测试平台,提高API测试效率

    RestCloud API自动化测试平台可根据API输入输出参数自动生成和保存测试用例,自动对API的参数边界进行测试,根据测试结果输出测试报告可全面提升API的测试效率.API自动化测试平台同时支持 ...