惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
H
Hacker News: Front Page
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
T
Tenable Blog
G
Google Developers Blog
A
About on SuperTechFans
The Cloudflare Blog
S
Securelist
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
Cisco Blogs
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
云风的 BLOG
云风的 BLOG
Forbes - Security
Forbes - Security
腾讯CDC
Application and Cybersecurity Blog
Application and Cybersecurity Blog
V
Vulnerabilities – Threatpost
IT之家
IT之家
博客园_首页
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Project Zero
Project Zero
月光博客
月光博客
NISL@THU
NISL@THU
爱范儿
爱范儿
S
Secure Thoughts
K
Kaspersky official blog
Security Latest
Security Latest
T
Tailwind CSS Blog
博客园 - Franky
D
Darknet – Hacking Tools, Hacker News & Cyber Security
TaoSecurity Blog
TaoSecurity Blog
The GitHub Blog
The GitHub Blog
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
S
SegmentFault 最新的问题
H
Help Net Security
T
Tor Project blog
L
LINUX DO - 热门话题
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
O
OpenAI News
S
Schneier on Security

博客园 - 郎中令

锦衣夜行,AI乐园 Redis实战:用缓存为数据库减负(二) Redis初体验: 搭建与简单应用(一) .Net Core的SwaggerUI接口分类+固定路由 真实性编码:配置NLog日志+Seq分布式 防御性编码:手搓NLog日志+Seq分布式 对接Java所谓的DES加解密 人大金仓数据库转换 人大金仓踩坑指南 RSA加解密笔记 HTTPS请求笔记- SSL安全通道验证问题 .NetCore打包部署(DLL) SM4算法快速预览与Framework4.5版本对接 简易首页防暴力-字典计时器 vite运行打包前端-部署Linux 记一次线上数据库异常的协助排查 降本增笑:记一次首页并发白屏优化过程 solr 基础介绍以及踩坑日记 动态展示缩放背景图
字典映射处理
郎中令 · 2024-07-08 · via 博客园 - 郎中令

     正常情况下不同的终端在进行接口对接时会对传输的数据进行加密,在解密之后拿到字符串,要么直接用动态类型获取,但是又要对字段进行判空校验,非常麻烦,这里封装了实体映射的方法,直接把解密后的字符串进行解析,映射到对应的实体对象中,其中是包括单实体,以及包含带子表的实体映射。 如下

        #region 字段映射

        /// <summary>
        /// 字段映射 解密映射实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="input"></param>
        /// <returns></returns>
        public static T MapEntity<T>(this string input) where T : new()
        {
            T entity = new T();
//带正则表达式解析,没有可不要 MatchCollection matches
= Regex.Matches(input, @"<(\w+):([^<>]+)>"); foreach (Match match in matches) { string key = match.Groups[1].Value; string value = match.Groups[2].Value; SetNullFieldData(key, value, entity); } return entity; } /// <summary> /// 字段映射 解密映射实体 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="input"></param> /// <returns></returns> public static T MapEntityV2<T, U>(this string input, string detailName) where T : new() where U : new() { T entity = new T();
//带正则表达式解析,没有可不要 MatchCollection matches
= Regex.Matches(input, @"<(\w+):(.+?)>"); foreach (Match match in matches) { string key = match.Groups[1].Value; string value = match.Groups[2].Value; if (key == detailName) { // 解析子表数据 var subTableData = value.Split(';'); List<U> subTableEntities = new List<U>(); foreach (var subData in subTableData) { var subDataParts = subData.Split(','); U subTableEntity = new U(); foreach (var part in subDataParts) { var subParts = part.Split(':'); string subKey = subParts[0]; string subValue = subParts[1]; SetNullFieldData(subKey, subValue, subTableEntity); } subTableEntities.Add(subTableEntity); } // 将子表数据映射到主实体对象的属性中 var property = typeof(T).GetProperty(key); if (property != null) { property.SetValue(entity, subTableEntities); } } else { // 解析主表数据 SetNullFieldData(key, value, entity); } } return entity; } private static void SetNullFieldData<T>(string key, string value, T entity) { var property = typeof(T).GetProperty(key); if (property == null) { return; } if (property.PropertyType == typeof(int?) && int.TryParse(value, out int parsedValue)) { property.SetValue(entity, parsedValue); } else if (property.PropertyType == typeof(long?) && long.TryParse(value, out long longValue)) { property.SetValue(entity, longValue); } else if (property.PropertyType == typeof(short?) && short.TryParse(value, out short shortValue)) { property.SetValue(entity, shortValue); } else { property.SetValue(entity, Convert.ChangeType(value, property.PropertyType)); } } #endregion