c# - 复杂匿名对象到动态公共(public)属性

标签 c# dynamic anonymous-types

如何在动态对象中公开匿名对象的复杂结构?

匿名对象被标记为内部,所以我正在寻找一种创造性的方法来解决这个问题

// 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/

相关文章:

c# - 动态 Linq 不起作用 - 选择未应用

c# - 从 Func<T> 返回匿名作为 .Select() 中的参数

c# - 请求的操作需要 sql clr 上下文

CSS混合静态和动态高度

javascript - IE7 - 设置 Javascript 生成元素的样式

c# - 动态设置 C# 匿名类型的属性名称

Linq 简单 XML 片段到非匿名类型

c# - 将所有 NLog 日志绑定(bind)回 WebAPI 中的原始请求的方法?

c# - ZXing ("Zebra Crossing") 在 C#

c# - 嵌套对象上的Elasticsearch过滤器范围