信息发布→ 登录 注册 退出

.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中文网其它相关文章!


相关文章: Lar*el 递归关系中排除指定分支的教程  uc浏览器网页版入口 uc浏览器网页版最新网址  抖音怎么赚钱_抖音创作者变现方法与途径指南  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  c++ dfs和bfs代码 c++深度广度优先搜索算法  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析  qq游戏手机版下载安装_qq游戏移动端入口  J*aScript中安全有效地处理localStorage字符串数据  58动漫网在线官方网 58动漫网正版动漫入口网址  CSS布局中意外空白:解决padding-top导致的顶部间距问题  微信网页版官方快速登录入口 微信网页版网页版账号直达  解决macOS Tkinter应用双击启动崩溃:PyInstaller打包指南  excel如何生成目录 excel一键生成工作表目录超链接  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  Python自定义类排序:解决lambda键值访问TypeError的实践指南  QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台  word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法  新手怎么开始学化妆 零基础化妆入门教程  如何在 Windows 11 中启动游戏手柄设置  俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问  EMS快递官网app_中国邮政速递物流手机客户端  Go语言HTML解析:利用Goquery精准获取指定元素内容  零跑汽车11月交付量达70327台 实现连续9个月正增长  如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情  深入理解Google Cloud Datastore查询:祖先路径与数据一致性  HTML空白字符处理机制:渲染、DOM与编码实践  Composer如何在生产环境安全地执行composer update  实现全屏滚动与导航点:专业教程  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量  Eclipse怎么运行工程_Eclipse工程运行配置说明  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  qq游戏跨平台入口_qq游戏多设备同步登录  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  学习通在线学习平台 学习通网页版直接进入课程中心  包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  如何在Promise链中优雅地中断后续then执行  必由学官网入口 必由学教师登录入口  电脑IP地址怎么查 查看本机IP地址的几种方法  抖音网页版企业服务中心登录入口_抖音网页版企业登录平台 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!