如何在动态
对象中公开匿名对象的复杂结构?
匿名对象被标记为内部
,所以我正在寻找一种创造性的方法来解决这个问题。
// This is the library I control
public void SendObject() {
var anonymous = new {
Text = "Test",
SubItem = new {
SubText = "Bla",
SubSub = new {
SubSubText = "Baha"
}
}
};
}
dynamic dyn = ExposeAnonymous(anonymous); // Perform voodoo
var result = ExternalLibrary.GetSpecialProperty(dyn);
// External library I don't control
public object GetSpecialProperty(dynamic dyn) {
return dyn.SubItem.SubSub.SubSubText;
}
问题是当将 dynamic
发送到其他外部库时,我无法控制,您会收到如下错误:
'object' does not contain a definition for 'SubItem'.
最佳答案
The problem is when sending the dynamic to other libraries,
... 还有问题。 C# 编译器将匿名类型声明为 internal
,这意味着其他程序集无法访问它们。
要么停止使用匿名类型,要么使用 [InternalsVisibleToAttribute]
使类型对其他程序集可见。在包含创建匿名类型实例的类型的程序集中,使用:
[InternalsVisibleTo("ExternalLibrary")]
(我实际上希望问题出在 SubItem
而不是 SubSub
...)
关于c# - 复杂匿名对象到动态公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173378/