在 IronPython 中访问 C# 类成员

本文关键字:成员 访问 IronPython | 更新日期: 2023-09-27 18:37:08

在我的C#代码中,我有一个类,它存储了一些我希望传递给我的python代码的数据。 但是,当我尝试在我的 python 代码中访问该类的属性时,我得到MissingMemberException. 这里有一些示例代码来说明我的意思:

C#:

class Event
{
public int EventId { get; set; }
public string EventName { get; set; }
} 
//other processing here...
//this just fills the list with event objects
List<Event> eventList = GetEvents(); 
//this sets a variable in the ScriptScope 
PythonEngine.SetVariable( "events", eventList);
PythonEngine.Execute("eventParser.py");

eventParser.py:

for e in events:
    print e.EventId, " / ", e.EventName

MissingMemberException显示"事件不包含名为 EventId 的成员"

我已经测试过将其他类型传递给 python,包括 List< int >List< string > 等原始类型的列表,它们工作正常。

那么如何在 python 脚本中访问这些类属性、EventIdEventName呢?

在 IronPython 中访问 C# 类成员

尝试公开Event类。问题可能是,尽管该属性是公共的,但默认情况下该类型internal的,因此动态类型不会"看到"仅由该类型声明的任何成员。

这只是一个猜测,如果错了,请说出来,这样我就可以删除答案,以免将来混淆任何人。不过,在一个程序集中使用匿名类型,通过在 C# 中的另一个程序集中使用动态类型,确实可以获得相同的效果。