标签: expandoobject

将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
Run Code Online (Sandbox Code Playgroud)

稍后添加

//这是我的实体

public class Customer
    {
        #region Public Properties

        [ColumnAttribute(Name = "IdColumn")]
        public string Id { get; set; }

        [ColumnAttribute(Name = "NameColumn")]
        public string Name { get; set; }

        [ColumnAttribute(Name = "AddressColumn")] …
Run Code Online (Sandbox Code Playgroud)

c# generics anonymous-types expandoobject

12
推荐指数
2
解决办法
2万
查看次数

从Expando /动态对象中动态删除成员

我正在寻找一种从动态对象中动态删除成员的方法(可能我们可以在这里使用Expando对象吗?).

好的,我想需要一点澄清......

当你这样做:

dynamic foo = new ExpandoObject();
foo.Bar = 42;
foo.Jar = 25;
Run Code Online (Sandbox Code Playgroud)

Bar,"罐子"属性会在运行时动态添加.我向用户显示这个,他可能会进一步添加自己的属性(表单可用选项),这可以通过添加成员到动态对象来完成.

但他也可以从Foo对象中删除成员(比如'Jar'),我们如何删除成员表单动态对象?我们可以在这里使用Expando对象吗?

c# dynamic expandoobject dynamicobject

12
推荐指数
0
解决办法
4517
查看次数

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

我有这个

dynamic d = new ExpandoObject();
d.Name = attribute.QualifiedName.Name;
Run Code Online (Sandbox Code Playgroud)

所以,我知道d会有一个属性Name.现在如果我在编译时不知道属性的名称,我该如何将该属性添加到动态.我发现了这个问题

所以,有一个复杂的调用绑定器等概念......首先很难得到它.这样做的更简单的方法是什么?

c# dynamic expandoobject c#-4.0

11
推荐指数
2
解决办法
1万
查看次数

创建一个ExpandoObjects列表,其中包含从数组中读取的属性

我正在尝试创建一个动态的对象列表,因为在我从文件中读取它们之前,我不知道我的对象将具有哪些属性.

所以假设我在数组中有我的对象的属性(例如FirstName,LastName,Email).

我想创建具有上述属性的名为Recipient的动态对象.然后我想创建一个列表并将其中一些对象添加到该列表中.

到目前为止,我已经完成了以下操作,但我不确定这是否是为动态对象分配属性的正确方法("fields"是数组的名称):

var persons = new List<dynamic>();
dynamic Recipient = new ExpandoObject() as IDictionary<string, Object>;
foreach (string property in fields)
{
   Recipient.property = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

如何使用上述属性创建收件人对象,然后将这些收件人添加到人员列表中?

.net c# dynamic expandoobject

10
推荐指数
1
解决办法
9085
查看次数

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

我从驱动程序api(在dll中)获得了一个类型为"密封类"的动态对象.我想用一些额外的属性来装饰这个对象.

我想做一些事情的效果:

public void expandIT(dynamic sealedObject) {

    ExpandoObject expand = new ExpandoObject(sealedObject);
    expand.time = DateTime.Now();
    etc....
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我喜欢JCL的解决方案.但是对于我想要做的事情,创建一个ExpandoObject然后将Dynamic sealed class对象作为子属性嵌入,然后将我的属性添加到父ExpandoObject更容易.谢谢JCL,我正在大脑冻结如何做到这一点.一世

c# expandoobject c#-4.0

10
推荐指数
2
解决办法
9927
查看次数

从性能的角度来看ExpandoObject与Dictionary的关系?

一个相当简单的问题.我正在开发一个项目,我需要从一种上下文存储中动态存储和检索属性值.这些值将立即写入并多次读取.检索速度是这里的首要任务,每纳秒都很重要.

通常,我只是用一个字典来实现它,但是使用C#4和ExpandoObject,我想也许有更好的方法?有没有人有这方面的经验?我在其他帖子中看到它没有使用字典实现,这使我对它是更快还是更慢感到好奇?

让我试着澄清一些伪代码:

// In the main loop
var context = new Context();
context["MyKey"] = 123;
context["MyOtherKey"] = "CODE";
context["MyList"] = new List<int>() { 1, 12, 14 };

foreach(var handler in handlers) {
    handler.DoStuff(context);
}
Run Code Online (Sandbox Code Playgroud)

-

// "Handlers"
class MyFirstHandler {
     void DoStuff(Context context) {
          if (context["MyKey"] > 100)
               context["NewKey"] = "CODE2";
     }
}

class MySecondHandler {
     void DoStuff(Context context) {
          if (context["MyOtherKey"] == "CODE")
             context["MyList"].Add(25); // Remember, it's only Pseudo-code..
     }
}
Run Code Online (Sandbox Code Playgroud)

好吧,希望你能得到我想要的东西..

我也完全接受其他建议.我一直在想要使Context类静态类型化(即实际上有一个MyKey属性,MyOtherKey属性等),虽然它可能会对我们产生很大的影响.

c# dictionary expandoobject

9
推荐指数
1
解决办法
7469
查看次数

将关键字添加到ExpandoObject时,"关键字'此'在静态属性,静态方法或静态字段初始化程序中无效"

我尝试向ExpandoObject添加一个动态方法,它将返回属性(动态添加)给它,但它总是给我错误.

我在这里做错了吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Dynamic;

namespace DynamicDemo
{
class ExpandoFun
{
    public static void Main()
    {
        Console.WriteLine("Fun with Expandos...");
        dynamic student = new ExpandoObject();
        student.FirstName = "John";
        student.LastName = "Doe";
        student.Introduction=new Action(()=>
      Console.WriteLine("Hello my name is {0} {1}",this.FirstName,this.LastName);
    );

        Console.WriteLine(student.FirstName);
        student.Introduction();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

编译器正在标记以下错误:错误1

关键字"this"在静态属性,静态方法或静态字段初始值设定项中无效

D:\ rnd\GettingStarted\DynamicDemo\ExpandoFun.cs 20 63 DynamicDemo

c# dynamic expandoobject

9
推荐指数
1
解决办法
1万
查看次数

List <dynamic>元素有字段但我无法访问它们.为什么?

我需要循环一个List<dynamic>对象.

列表的对象都有值,但由于某种原因,我无法访问任何动态对象字段.下面是我的调试窗口的屏幕截图:

在此输入图像描述

在那里你可以看到对象包含字段(例如Alias,Id,Name等).

我试了两个强制转换为IDictionary<string, object>ExpandoObject,无济于事.我之前没有遇到过这样的事情:dynamic对象存在时无法访问对象中的现有字段.

这有什么不对?

代码抛出Microsoft.CSharp.RuntimeBinder.RuntimeBinderException一条消息说明{"'object' does not contain a definition for 'Name'"}.

创建列表添加了匿名类型的对象,如下所示:

return new List<dynamic>(fields.Select(field => new 
                        { 
                            Id = field.Id, 
                            Alias = field.Alias, 
                            Name = field.Name, 
                            Type = field.Type, 
                            Value = field.Value,
                            SortOrder = field.SortOrder
                        }));
Run Code Online (Sandbox Code Playgroud)

这里fields是一个ICollection<Field>,一个强类型集合.

c# expandoobject

9
推荐指数
1
解决办法
926
查看次数

从动态 ExpandoObject 生成 JSON 字符串

我正在使用 C# 并尝试从动态对象生成 JSON 字符串。

dynamic reply = new System.Dynamic.ExpandoObject();
reply.name = "John";
reply.wins = 42;
string json = System.Web.Helpers.Json.Encode(reply);
System.Console.WriteLine(json);
Run Code Online (Sandbox Code Playgroud)

(注意,上面需要对 System.Web.Helpers 程序集的引用。)

我希望这能输出字符串:

{"name":"John","wins":42}
Run Code Online (Sandbox Code Playgroud)

但它实际上输出:

[{"Key":"name","Value":"John"},{"Key":"wins","Value":42}]
Run Code Online (Sandbox Code Playgroud)

我需要更改什么才能获得我希望的输出?

c# json expandoobject

9
推荐指数
1
解决办法
5190
查看次数

检查C#Expando类中是否存在属性

我想看看C#Expando类中是否存在属性.

很像python中的hasattr函数.我想为hasattr提供c#equalant.

像这样的东西......

if (HasAttr(model, "Id"))
{
  # Do something with model.Id
}
Run Code Online (Sandbox Code Playgroud)

c# dynamic expandoobject

8
推荐指数
1
解决办法
9708
查看次数