新闻中心

.NET怎么将一个匿名对象转换为强类型对象

2025-11-05
浏览次数:
返回列表
答案:匿名对象无法直接转换为强类型,但可通过反射、序列化或第三方库实现属性映射。使用反射可遍历属性并复制值,适用于通用场景;JSON序列化通过序列化再反序列化实现,代码简洁但需类型兼容;高性能需求可选AutoMapper或表达式树缓存优化性能。

.net怎么将一个匿名对象转换为强类型对象

在 .NET 中,匿名对象本身是编译时生成的内部类,无法直接通过类型转换赋值给自定义的强类型对象。但可以通过反射、序列化或辅助方法实现属性级别的映射。

使用反射进行属性复制

通过反射读取匿名对象的属性,并将其值设置到目标强类型实例中:

public static T ToStrongType(object anonymousObject) where T : new()

{

   var result = new T();

   var sourceProps = anonymousObject.GetType().GetProperties();

   var targetProps = typeof(T).GetProperties();

   foreach (var sourceProp in sourceProps)

   {

      var targetProp = targetProps.FirstOrDefault(p => p.Name == sourceProp.Name && p.PropertyType == sourceProp.PropertyType);

      if (targetProp != null && targetProp.CanWrite)

      {

         targetProp.SetValue(result, sourceProp.GetValue(anonymousObject));

      }

   }

   return result;

}

VALL-E VALL-E

VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法

VALL-E 134 查看详情 VALL-E

示例用法:

var anon = new { Name = "Alice", Age = 30 };

var person = ToStrongType(anon); // 假设 Person 类有同名同类型的属性

使用 JSON 序列化(推荐简单场景)

借助 System.Text.JsonNewtonsoft.Json 将匿名对象序列化再反序列化为目标类型:

// 使用 System.Text.Json

using System.Text.Json;

public static T ToStrongTypeJson(object anonymousObject)

{

   var json = JsonSerializer.Serialize(anonymousObject);

   return JsonSerializer.Deserialize(json);

}

注意:该方式要求属性名称和类型兼容,且目标类型有公共无参构造函数。

使用表达式树或第三方库提升性能

如果频繁转换,反射性能较低。可考虑:

  • AutoMapper:配置好映射规则后高效转换
  • ExpressMapper / Mapster:支持匿名对象到强类型的自动映射
  • 手写表达式树缓存赋值逻辑,避免重复反射

直接强制类型转换(如 (Person)anon)会编译失败或抛异常,因为匿名类型是密封的且不可见。

基本上就这些方法,JSON 反序列化最简洁,反射最通用,高性能场景建议用缓存映射。

以上就是.NET怎么将一个匿名对象转换为强类型对象的详细内容,更多请关注php中文网其它相关文章!


# 是一种  # 给国外网站做推广赚钱  # 品牌营销推广外包  # 网站优化效果好的公司  # 国际站关键词排名插件  # 温州有哪些seo视频  # 莱阳网站优化推广  # 营销推广显示赞助吗  # 云天下网站建设  # 东莞产品营销网站建设  # 运营营销推广学习  # 适用于  # 遍历  # php  # 更胜  # 对决  # 高性能  # 第三方  # 更有  # 转换为  # 序列化  # .net  # app  # json  # js  # java 


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


相关推荐: 在python-socketio事件处理器中安全访问Flask应用上下文  iwriter统一登录平台 iwrite账号密码登录页面  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  windows10怎么查看硬盘序列号_windows10硬盘id查询命令  支付宝如何管理隐私设置_支付宝隐私保护的配置技巧  C#中解析不规范的HTML为XML 常见的坑与解决办法  押井守高度称赞《辐射4》:玩了八年都停不下来!  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  在哪找SublimeJ远程工具_SFTP插件配置教程  手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  处理嵌套交互式控件:前端可访问性指南  苹果手机如何防止被恶意App追踪  Tailwind CSS line-clamp 布局问题解析与修复指南  解决 Express.js 中 PUT 请求密码修改失败的路由配置指南  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  狙击外星人小游戏开始_狙击外星人小游戏立即开始  J*a递归快速排序中静态变量导致数据累积问题的解决方案  C++指针和引用有什么区别_C++内存管理核心概念深度解析  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  Bing引擎入口最新2025 Bing搜索免费官方登录  深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量  高德地图公交到站提醒失败如何解决 高德提醒权限设置  解决Bootstrap卡片顶部边距导致背景图下移的问题  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  TikTok评论显示延迟如何处理 TikTok评论刷新优化方法  曝R星经典之作开发图 设计简陋但信息密集!  J*aScript类型检查_j*ascript代码规范  快手极速版在线观看 官方网页版登录地址  字由网在线版登录地址 字由网网页版安全入口  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】  J*aScript中localStorage数据的获取、清洗与格式化教程  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  163邮箱官方主页登录 直达网易邮箱登录核心页面  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  痛风发作了怎么办? 快速止痛和后期饮食调理  《刺客信条:影》PS5 Pro和Switch 2画面对比  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复 

搜索