You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用Impromptu映射List到接口时遇RuntimeBinderException问题求助

解决Impromptu将List映射到接口时的RuntimeBinderException问题

我来帮你排查这个问题——你碰到的RuntimeBinderException本质原因是:你直接把List<FinalDecisionInformation>实例传给Impromptu.ActLike<IFinalDecisionEvaluate>,但Impromptu无法自动把整个List实例映射到接口的FinalDecisionList属性上。

问题根源

Impromptu.ActLike<T>的工作逻辑是基于动态类型模拟接口实现:它需要一个包含接口所有属性/方法的对象,才能将其“伪装”成接口类型。你直接传入List的话,Impromptu会尝试把List本身当作接口的实现,但List<T>并没有FinalDecisionList这个属性,所以当你访问该属性时,就会触发绑定异常。

解决方案

最简洁的修复方式是用匿名对象包装你的List,让匿名对象的属性名和接口的属性名完全匹配,这样Impromptu就能正确绑定属性:

List<FinalDecisionInformation> finalDecision = (List<FinalDecisionInformation>)serializer.Deserialize(stringReader);
// 用匿名对象包装List,属性名和接口保持一致
var finalDecisionSend = Impromptu.ActLike<IFinalDecisionEvaluate>(new { FinalDecisionList = finalDecision });

如果你的场景需要更复杂的逻辑(比如后续要修改属性、添加方法),也可以手动实现接口:

// 实现IFinalDecisionEvaluate的具体类
public class FinalDecisionEvaluate : IFinalDecisionEvaluate
{
    public List<FinalDecisionInformation> FinalDecisionList { get; set; }
}

// 使用时直接实例化赋值
var finalDecisionSend = new FinalDecisionEvaluate { FinalDecisionList = finalDecision };

第一种方式足够解决你当前的问题,因为匿名对象的FinalDecisionList属性和接口定义完全对齐,Impromptu可以完美模拟接口的行为。

内容的提问来源于stack exchange,提问作者Gerhardus Carinus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:57:37