jjzjj

ExpandoObject

全部标签

.net - 如何将 ExpandoObject 序列化为属性/值对?

我在调用OnActionExecuted时拦截WebAPI2管道。在这里,我将操作返回的对象递归地转换为ExpandoObject(即对象上本身是对象的任何属性也会转换为ExpandoObject,依此类推层次结构)。它可以XML序列化,但只能作为字典(大概是因为ExpandoObject实现了IDictionary,它只是从中提取键和值)。我宁愿看到它被序列化,就好像它是一个具有属性的对象,而不是一堆键/值对。有什么方法可以在不编写我自己的XML序列化程序的情况下做到这一点? 最佳答案 您可以将ExpandoObject包装在IS

XML 动态对象和 IEnumberables

我的DynamicXML对象有一些问题,它很好地解析XML,并且对于单个元素工作得很好,但是当我有多个子元素时它就会崩溃。我显然遗漏了什么,但我不知道是什么。这是类:publicclassDynamicXml:DynamicObject{readonlyXElementelement;publicDynamicXml(stringxml){element=XElement.Parse(xml);}publicDynamicXml(XElementxElement){element=xElement;}publicoverrideboolTryGetMember(GetMemberBin

c# - 使用从数组读取的属性创建 ExpandoObjects 列表

我正在尝试创建对象的动态列表,因为在从文件中读取对象之前,我不知道它们将具有哪些属性。所以假设我在一个数组中有我的对象的属性(例如FirstName、LastName、Email)。我想创建具有上述属性的名为Recipient的动态对象。然后我想创建一个列表并将其中一些对象添加到该列表中。到目前为止我已经完成了以下操作,但我不确定这是否是将属性分配给动态对象的正确方法(“字段”是数组的名称):varpersons=newList();dynamicRecipient=newExpandoObject()asIDictionary;foreach(stringpropertyinfiel

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

我从驱动程序api(在dll中)获取类型为“密封类”的动态对象。我想用一些额外的属性来装饰这个对象。我想做一些事情:publicvoidexpandIT(dynamicsealedObject){ExpandoObjectexpand=newExpandoObject(sealedObject);expand.time=DateTime.Now();etc....}更新我喜欢JCL的解决方案。但是对于我想做的事情,创建一个ExpandoObject然后将Dynamic密封类对象作为子属性嵌入,然后将我的属性添加到父ExpandoObject更容易。感谢JCL,对于如何执行此操作,我的大

c# - 以编程方式生成属性

我想加载一个属性文件(它是一个.csv文件,每一行都有一个名称和关联的数值),然后像这样访问这些属性值:FileLoader.PropertyOne或FileLoader.PropertyTwo。问题是我不想为每个值都写一个属性,我希望它们从文件中生成。所以publicclassFileLoader{publicintProperty1{get;privateset;}}不是我要找的。这可能吗?我看不出有什么办法可以做到这一点,因为编译器显然不知道属性名称。也许是类似的东西? 最佳答案 在C#4.0中,您可以使用ExpandoObj

c# - 将 ExpandoObject 转换为匿名类型

我可以将ExpandoObject转换为匿名类型吗?varanoObj=new{name="testName",email="testEmail"};dynamicexpandoObj=newSystem.Dynamic.ExpandoObject();//HereI'mpopulatingtheexpandoObjwithsamepropertynames/typesinanonymoustype(anoObj)//Now,howtoconvertthisExpandoObjecttoanonymoustype?varnewObj=(typeof(anoObj)expandoObj)

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

假设我有这个对象:dynamicfoo=newExpandoObject();foo.bar="fizz";foo.bang="buzz";例如,我将如何删除foo.bang?我不想简单地将属性的值设置为null——出于我的目的,我需要将其完全删除。此外,我意识到我可以通过从第一个开始绘制kv对来创建一个全新的ExpandoObject,但这效率很低。 最佳答案 将expando转换为IDictionary并调用Remove:vardict=(IDictionary)foo;dict.Remove("bang");

c# - 为什么 'dynamic' ExpandoObject 抛出 RuntimeBinderException,即使它包含属性的定义?

使用以下示例代码:(VS2013,更新3)dynamicdemo=newExpandoObject();demo.Test=10;varj=demo.Test;//throwsexception调试此代码时,在VS中检查“当异常为:‘抛出’时中断”,然后尝试访问现有属性“测试”抛出RuntimeBinderException:System.Dynamic.ExpandoObject'doesnotcontainadefinitionfor'Test'注意:跳到下一行,变量j已正确设置为10。Q1:当Test属性肯定存在且值为10时,事实变量j证明成功设置该值,为什么会抛出异常?当我尝试

c# - 如何在 C# MVC Controller 操作中将动态对象序列化为 JSON?

我想将动态对象序列化为JSON。我尝试使用ExpandoObject,但结果不是我需要的:publicJsonResultEdit(){dynamico=newExpandoObject();((IDictionary)o)["abc"]="ABC";//oro.abc="ABC";returnJson(o);}我希望JSON看起来像:{"abc":"ABC"}但它看起来像[{"Key":"abc","Value":"ABC"}]显然ExpandoObject不行,但是我可以继承DynamicObject并以某种方式覆盖它的方法来实现我想要的JSON格式吗?

C# 动态对象初始值设定项无法编译

下面的代码对我来说似乎是合理的。它应该创建对象,然后使用动态功能让我分配我喜欢的任何属性。然而,编译器说“ExpandoObject不包含测试的定义”。我对此说,“我知道,这就是问题所在!”dynamicexample=newExpandoObject{Test="fail"};关于为什么csc不允许这样做的任何想法。另一种方法是手动将代码扩展到单独的属性分配中。dynamicexample=newExpandoObject();example.Test="fail";当我有很多属性要分配时,这很烦人。 最佳答案 在对象初始值设定项