标签: dynamicobject

确定DynamicObject成员访问的预期类型

是否可以确定动态成员访问期望的类型?我试过了

dynamic foo = new MyDynamicObject();
int x = foo.IntValue;
int y = (int)foo.IntValue;
Run Code Online (Sandbox Code Playgroud)

并且TryGetMember拦截GetMemberBinder.ReturnType是对象的任何一种方式.我还想TryConvert知道是否可以调用它来进行转换,但它永远不会被命中.

是否有一些其他覆盖我缺少让我确定调用者想要什么类型,以便我可以进行适当的转换?

c# dynamic dynamicobject

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

通过自动列生成将DynamicObject绑定到DataGrid?

我还在尝试使用DynamicObjects.现在我需要一些信息:我正在尝试将从DynamicObject继承的对象绑定到WPF DataGrid(而不是Silverlight).

如何让DataGrid从通常在运行时生成的对象的可用公共属性中自动创建其列?这可能吗?

data-binding wpf datagrid dynamicobject c#-4.0

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

将类型'System.Dynamic.DynamicObject转换为System.Collections.IEnumerable

我成功地使用MVC3中的JavaScriptSerializer将json字符串反序列化为动态对象.我无法弄清楚的是如何将它投射到我可以列举的东西上.下面的foreach代码行是我最新的attemt,但它错误:"无法将类型'System.Dynamic.DynamicObject'隐式转换为'System.Collections.IEnumerable'.如何转换或转换以便我可以遍历字典?

 public dynamic GetEntities(string entityName, string entityField)
        {
           var serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new[] { new                        MyProject.Extensions.JsonExtension.DynamicJsonConverter() });
           dynamic data = serializer.Deserialize(json, typeof(object));
           return data;
        }


 foreach (var author in GetEntities("author", "lastname"))
Run Code Online (Sandbox Code Playgroud)

c# javascriptserializer dynamicobject

9
推荐指数
2
解决办法
6563
查看次数

DynamicObject对空值的行为有所不同

这是一个DynamicDataObject派生自的类DynamicObject

 public class DynamicDataObject : DynamicObject
 {
        private readonly Dictionary<string, object> _dataDictionary = new Dictionary<string, object>();

        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            return _dataDictionary.TryGetValue(binder.Name, out result);
        }

        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            if (!_dataDictionary.ContainsKey(binder.Name))
            {
                _dataDictionary.Add(binder.Name, value);
                return true;
            }

            return false;
        }

        public override IEnumerable<string> GetDynamicMemberNames()
        {
            return _dataDictionary.Keys;
        }
  }
Run Code Online (Sandbox Code Playgroud)

我正在消费DynamicDataObject如下.

 public MainWindow()
 {
     InitializeComponent();
     dynamic person = new DynamicDataObject();
     person.FirstName = "Vimal";
     person.LastName = "Adams";
     person.Address …
Run Code Online (Sandbox Code Playgroud)

c# dynamic dynamicobject

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

C#DynamicObject动态属性

假设我不能使用ExpandoObject并且必须像我这样自己滚动: -

class MyObject : DynamicObject {
    dictionary<string, object> _properties = dictionary<string, object>();

    public override bool TryGetMember(GetMemberBinder binder, out object result) {
        string name = binder.Name.ToLower();

        return _properties.TryGetValue(name, out result);
    }

    public override bool TrySetMember(SetMemberBinder binder, object value) {
        _properties[binder.Name.ToLower()] = value;

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

并进一步向下我的类层次结构

class MyNewObject : MyObject {
    public string Name {
        get {
            // do some funky stuff
        }
        set {
            // ditto
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是非常好的,因为现在我可以做到以下几点: -

dynamic o = MyNewObject();

o.Age = 87; …
Run Code Online (Sandbox Code Playgroud)

c# dynamicobject

8
推荐指数
2
解决办法
9815
查看次数

从动态对象C#读取值

我正在尝试从System.Web.Helpers.DynamicJsonObject读取值.我可以看到调试器中的值,但我无法弄清楚如何访问它们.我试过这个

item.GetType().GetProperty("batch_id").GetValue(item, null);

但是当我尝试在调试器中得到这个响应"item.GetType().GetProperty("batch_id")'为null"

我附上了我的解决方案中的图片 在此输入图像描述

谢谢,-Tesh

c# asp.net-mvc json dynamicobject

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

转换动态对象并传递到UnitOfWork和Repository模式.抛出异常

这是一个非常具体的问题.不太确定如何说出来.基本上我正在实现工作单元和存储库模式,我有一个动态对象,我转换为int,但如果我使用var它将在尝试调用方法时抛出异常.

我试图删除所有这些问题,我可以解决这个问题.出于某种原因,我只看到这两种设计模式.我得到的例外是Additional information: 'BlackMagic.ITacoRepo' does not contain a definition for 'DoStuff'

这是代码:

class BlackMagic
{
    static void Main(string[] args)
    {
        dynamic obj = new ExpandoObject();
        obj.I = 69;

        UnitOfWork uow = new UnitOfWork();

        int i1 = Convert.ToInt32(obj.I);
        var i2 = Convert.ToInt32(obj.I);

        if(i1.Equals(i2))
        {
            uow.TacoRepo.DoStuff(i1); // Works fine
            uow.TacoRepo.DoStuff(i2); // Throws Exception
        }
    }
}

class UnitOfWork
{
    public ITacoRepo TacoRepo { get; set; }

    public UnitOfWork()
    {
        TacoRepo = new TacoRepo();
    }
}

class Repo<T> : IRepo<T> …
Run Code Online (Sandbox Code Playgroud)

c# unit-of-work repository-pattern expandoobject dynamicobject

7
推荐指数
1
解决办法
459
查看次数

计算动态匿名对象(C#)中的对象

我有一个动态对象(实际上是json),我将其传递给我的MVC WebApi控制器.

json对象包含匿名对象中的多个列表,这些列表通过另一个应用程序提交给控制器client.PostAsJsonAsync("myapiurl", objectGraph).

我需要做的就是在MVC端验证对象,就是获取每个列表中对象的数量.我可以通过动态访问列表mydynamicobject.mylist和单个项目,mydynamicobject.mylist[index]但我似乎无法得到计数mydynamicobject.mylist.

到目前为止我尝试过的:

  • LINQ扩展方法 - 不适用于动态
  • Enumerable.Count(mydynamicobject.mylist) - 不能推断类型

还有其他想法吗?计数实际上在动态对象中是正确可用的,base但显然不能作为属性访问.救命!

这现在有效:

// This is a MVC/WebApi method
public dynamic Post(dynamic mydynamicobject)

if (((ICollection)mydynamicobject.mylist).Count == 0)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)

发送动态对象的代码(不同的应用程序):

HttpClient client = new HttpClient();  
client.DefaultRequestHeaders.Accept.Add
  (new MediaTypeWithQualityHeaderValue("application/json")); 

var objectGraph = new { mylist = new { Id = 1 }, mylist2 = new { Name = "ABC" } }; 
var r = client.PostAsJsonAsync("api/mycontroller", objectGraph).Result;
Run Code Online (Sandbox Code Playgroud)

c# linq asp.net-mvc anonymous-types dynamicobject

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

C#如何在继承自DynamicObject的类上序列化(JSON,XML)常规属性

我试图序列化一个继承自DynamicObject的类的实例.我已经毫不费力地将动态属性序列化了(为简洁起见,这里没有演示),但"正常"属性似乎并没有成功.无论序列化类如何,我都会遇到同样的问题:它与JavaScriptSerializer,JsonConvert和XmlSerializer相同.

public class MyDynamicClass : DynamicObject
{
    public string MyNormalProperty { get; set; }
}

...

MyDynamicClass instance = new MyDynamicClass()
{
    MyNormalProperty = "Hello, world!"
};

string json = JsonConvert.SerializeObject(instance);
// the resulting string is "{}", but I expected to see MyNormalProperty in there
Run Code Online (Sandbox Code Playgroud)

MyNormalProperty不应该出现在序列化字符串中吗?有没有诀窍,或者我误解了从DynamicObject继承的一些基本原理?

c# serialization json.net dynamicobject

5
推荐指数
1
解决办法
730
查看次数

c#中的ExpandoObject是否具有这样的实例访问器?

考虑我有这个简单的c#代码:

dynamic obj = new ExpandoObject();
obj.FirstName = "John";
obj.LastName = "Doe";
Run Code Online (Sandbox Code Playgroud)

John Doe在这种情况下,我想添加将返回全名的方法.我知道以下行会起作用,但不确定它是否是最好的方法

obj.GetFullName = new Func<string>(() => $"{obj.FirstName} {obj.LastName}");
Run Code Online (Sandbox Code Playgroud)

有没有其他方法dynamic object通过该GetFullName方法访问实例?

.net c# expandoobject dynamicobject

5
推荐指数
0
解决办法
64
查看次数