Dapper 默认不支持只写属性映射,因其在反序列化前通过 PropertyInfo.CanRead 过滤属性,跳过无 get 的属性;虽 SetValue 支持赋值,但前期元数据筛选已排除。

Dapper 默认不支持只写属性(即只有 set、没有 get 的属性)的映射,因为它在反序列化时需要通过属性的 set 方法赋值,但同时也依赖反射获取属性元数据——而标准 .NET 反射对纯只写属性的支持有限,尤其在旧版 Dapper(如 2.0 之前)中会直接跳过这类属性,导致映射失败或静默忽略。
只写属性为什么通常映射不了
Dapper 在执行查询后,使用 PropertyInfo.SetValue() 给目标对象赋值,这一步本身能接受只写属性。但问题出在前期:它会先调用 PropertyInfo.CanRead 判断是否为可读属性,默认过滤掉 CanRead == false 的属性。所以即使你写了 set,只要没 get,Dapper 就不会把它纳入映射字段列表。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~