Tag: expandoobject

如何对具有ExpandoObject类型的对象应用扩展方法?

这是我的代码: public static class DynamicExtensions public static void Add(this ExpandoObject obj, string path){ dynamic _obj = obj; if (_obj == null) throw new ArgumentNullException(“obj”); _obj.path = path; } } 但是当我以这种方式调用它时,我得到“’System.Dynamic.ExpandoObject’的错误不包含’Add’的定义”: dynamic obj = new ExpandoObject(); obj.Add(“p1”); 怎么解决? 提前致谢!

可以将动态对象转换为ExpandoObject(c#)

我从驱动程序api(在dll中)获得了一个类型为“密封类”的动态对象。 我想用一些额外的属性来装饰这个对象。 我想做一些事情的效果: public void expandIT(dynamic sealedObject) { ExpandoObject expand = new ExpandoObject(sealedObject); expand.time = DateTime.Now(); etc…. } UPDATE 我喜欢JCL的解决方案。 但是对于我想要做的事情,创建一个ExpandoObject然后将Dynamic sealed class对象作为子属性嵌入,然后将我的属性添加到父ExpandoObject更容易。 谢谢JCL,我正在大脑中冻结如何做到这一点。 一世

动态添加属性到动态对象?

我有这个 dynamic d = new ExpandoObject(); d.Name = attribute.QualifiedName.Name; 所以,我知道d将有一个属性Name。 现在如果我在编译时不知道属性的名称,我该如何将该属性添加到动态。 我发现了这个问题 所以,有一个复杂的调用绑定器等概念……首先很难得到它。这样做的更简单的方法是什么?

将ExpandoObject强制转换为匿名类型

我可以将ExpandoObject强制转换为匿名类型吗? var anoObj = new { name = “testName”, email = “testEmail” }; dynamic expandoObj = new System.Dynamic.ExpandoObject(); // Here I’m populating the expandoObj with same property names/types in anonymoustype(anoObj) // Now, how to convert this ExpandoObject to anonymoustype ? var newObj = (typeof(anoObj)expandoObj); // This doesn’t work 稍后添加 //这是我的实体 public class Customer { #region […]

使用JSON.NET将属性反序列化为ExpandoObject

例如,有一个像下一个的对象: public class Container { public object Data { get; set; } } 它以这种方式使用: Container container = new Container { Data = new Dictionary { { “Text”, “Hello world” } } }; 如果我反序列化从序列化上面的实例获得的JSON字符串, Data属性,即使我提供ExpandoObjectConverter ,它也不会反序列化为ExpandoObject : Container container = JsonConvert.Deserialize(jsonText, new ExpandoObjectConverter()); 如何反序列化使用匿名对象分配的类属性,或者至少不是具体类型作为ExpandoObject ? 编辑: 有人回答说我可以使用动态对象。 这对我不起作用。 我知道我可以这样做,但事实并非如此,因为我需要一个ExpandoObject。 谢谢。 编辑2: 其他一些用户回答我可以将JSON字符串反序列化为ExpandoObject 。 这不是这个问题的目标。 我需要反序列化具有动态属性的具体类型。 在JSON字符串中,此属性可以是关联数组。

在C#中,如何从ExpandoObject中删除属性?

说我有这个对象: dynamic foo = new ExpandoObject(); foo.bar = “fizz”; foo.bang = “buzz”; 我如何删除foo.bang ? 我不想简单地将属性的值设置为null – 为了我的目的,我需要完全删除它。 此外,我意识到我可以通过从第一个绘制kv对来创建一个全新的ExpandoObject,但这将是非常低效的。

为什么我不能索引到ExpandoObject?

今天在研究C#动态时,有些东西让我感到惊讶(我从未使用过它们,但最近我一直在尝试使用Nancy Web框架)。 我发现我不能这样做: dynamic expando = new ExpandoObject(); expando.name = “John”; Console.WriteLine(expando[“name”]); 最后一行抛出exception: 无法将带有[]的索引应用于“System.Dynamic.ExpandoObject”类型的表达式 我理解错误信息,但我不明白为什么会这样。 我查看了ExpandoObject的文档,它显式地实现了IDictionary ,因此有一个this.[index]方法( MSDN )。 为什么我不能打电话给它? 当然,没有什么可以阻止我手动将ExpandoObject向下转换为字典然后索引到它中,但这种方式无视这一点; 它也没有解释Expando如何能够隐藏其中一个接口的方法。 这里发生了什么?

公开ExpandoObject的属性

我有一个ExpandoObject,我发送到一个外部库方法,它接受一个对象。 从我看到的这个外部lib内部使用TypeDescriptor.GetProperties,这似乎导致我的ExpandoObject的一些问题。 我可以改为使用匿名对象,这似乎有效但我使用ExpandoObject更方便。 我是否需要构建自己的DynamicObject并通过实现ICustomTypeDescriptor自己处理它,或者我在这里遗漏了一些东西。 想法? 更新 除了以下somedave的答案(根据评论),我添加了这个类 public class ExpandoObjectTypeDescriptionProvider : TypeDescriptionProvider { private static readonly TypeDescriptionProvider m_Default = TypeDescriptor.GetProvider(typeof(ExpandoObject)); public ExpandoObjectTypeDescriptionProvider() :base(m_Default) { } public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { var defaultDescriptor = base.GetTypeDescriptor(objectType, instance); return instance == null ? defaultDescriptor : new ExpandoObjectTypeDescriptor(instance); } } 并注册如下: dynamic parameters = new ExpandoObject(); […]

我可以在.NET 4中序列化ExpandoObject吗?

我正在尝试使用System.Dynamic.ExpandoObject因此我可以在运行时动态创建属性。 稍后,我需要传递此对象的实例,并且使用的机制需要序列化。 当然,当我尝试序列化我的动态对象时,我得到了exception: System.Runtime.Serialization.SerializationException未处理。 在Assembly’System.Core中输入’System.Dynamic.ExpandoObject’,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089’未标记为可序列化。 我可以序列化ExpandoObject吗? 是否有另一种方法来创建可序列化的动态对象? 也许使用DynamicObject包装器? 我创建了一个非常简单的Windows窗体示例来复制错误: using System; using System.Windows.Forms; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Dynamic; namespace DynamicTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { dynamic dynamicContext = new ExpandoObject(); dynamicContext.Greeting […]