问题标签 [expandoobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 在 expando 对象上定义计算属性
我正在使用 expando 对象,并且正在尝试定义计算属性。
我知道我可以通过执行以下操作来定义一个简单的属性:
同样,我也可以定义一个方法:
使用标准对象时,我们可以定义计算属性,即定义将返回自定义方法/计算结果的属性。不需要举例。
我需要在我的 expando 上做类似的事情——拥有一个实际上调用“Func”的属性(或其他形式的委托,只要我可以调用自定义方法并具有自定义返回类型,任何事情都会发生)。所以基本上我需要调用第二个示例中的方法,但让它像属性一样工作。
基本上我需要能够使用myExpando.GetTheQuestion而不是myExpando.GetTheQuestion()来调用它,同时保持将自定义委托定义为属性主体的能力。
有没有办法做到这一点?我相信我可以通过使用表达式树来做到这一点,但我承认我有点迷路了。任何人都可以就如何实现这一目标提供一些指导吗?
编辑
做了更多的研究。除非有一些我不知道的非常具体的类/接口/sintax,否则我开始认为上述是不可能的。据我所知,ExpandoObject 类通过定义一些执行后台管道的方法来工作 - TryGetMember、TrySetMember 等。现在,当在动态 objetc 上“访问属性”时,TryGetMember 是被调用的成员。该成员从某种内部字典返回一个值(是的,我知道......这有点简化,但应该给出这个想法)......没有对返回的值类型进行测试。这意味着在我的示例中myExpando.GetTheQuestion将返回原始 Func。
似乎由于 TryGetMember 只是返回一个值,因此没有办法让它“执行”属性代码。为了实现这一点,您需要某种表达式/lambda/func/action 代理项,其值实际上是方法的结果。这似乎是不可能的(除非我错过了什么,否则也没有多大意义——基本上你会有一个设置为“委托”的值,然后作为委托返回值获取???)。我是正确的还是这个或者我错过了什么?
c# - 如何在 C# 中递归遍历和记录 HttpRequestMessage 的属性?
感谢您的关注!
背景
我正在开发一个 MVC4 .NET 应用程序,并编写了一个过滤器来捕获所有错误(应用程序范围内),记录所述错误,然后通过 HTML 格式的电子邮件将它们报告给开发团队。
我编写的过滤器获取 HttpActionExecutedContext 并从那里我可以导出异常、堆栈跟踪、调用的方法以及一堆其他有用的信息。
我访问的大部分信息都是字符串或 IDictionary 的形式,我使用辅助方法来迭代这些项目并将它们放入用于报告电子邮件的 HTML 表中。
然而,有一个属性让我很伤心:HttpRequestMessage 属性。
HttpActionExecutedContext 对象(HttpActionExecutedContext.Request.Properties)的这个属性有很多不同类型的嵌套属性。
问题
我遇到了几个障碍,以递归方式遍历此 HttpActionExecutedContext.Request.Properties 对象并将其解析为 KV 对的层次结构。问题是由于空值、类型不匹配等造成的。
这是我从 Request.Properties 获得的当前结果:
MS_HttpContext:
System.Web.HttpContextWrapperMS_RetrieveClientCertificateDelegate:System.Func`2[System.Net.Http.HttpRequestMessage,System.Security.Cryptography.X509Certificates.X509Certificate2]
MS_IsLocal:
未创建值。MS_IncludeErrorDetail:
未创建值。MS_HttpRouteData:System.Web.Http.WebHost.Routing.HostedHttpRouteDataMS_SynchronizationContext:
System.Web.AspNetSynchronizationContextMS_HttpConfiguration:System.Web.Http.HttpConfiguration
MS_DependencyScope:
System.Web.Http.Dependencies.EmptyResolverMS_DisposableRequestResources:>System.Collections.Generic.List`1[System.IDisposable]
所以你可以看到,就价值而言,我真正得到的只是type
财产的价值。我需要value
. 如果该值是嵌套字典或其他东西,那很好,但我需要遍历它并记录它的 KV 对,因为只给我对象的类型是没有用的。
问题
我如何递归地遍历这个对象并最终得到一个 KV 对的字典(其中一些值本身就是字典)?是否有我缺少的辅助类或某种动态方法?
code-analysis - ExpandoObject 导致违反规则 CA1502:避免过于复杂
我有执行邮件合并类型操作的代码,并且我正在使用动态/ExpandoObject 来组装属性。我这样做而不是构建一个匿名类,因为在邮件合并发生之前,不同的方法会添加属性。代码运行良好。
问题是 Visual Studio 代码分析将 ExpandoObject 上的每个属性集操作评分为 1 点圈复杂度。所以一个简单的线性方法设置一堆没有分支逻辑的属性是得到分数> 25,这是违反此规则的值。
这是我的代码问题,还是代码分析工作方式的问题?
我的代码如下所示:
winforms - 将 ExpandoObject 实例的自定义属性值绑定到 .NET Windows 窗体控件
上下文:Visual Studo 2012/C# 5.0
我有一个带有三个文本框控件的 .NET Windows 窗体:firstNameTextBox、lastNameTextBox和ageTextBox,以及一个简单的自定义类
我想将客户自定义类的实例的属性绑定到我的 Windows 窗体控件。所以我写:
这很好用。然后我通过使用匿名类型稍微更改代码:
}
这也很有效,尽管在这种情况下我只有单向绑定。然后我进一步更改我的代码:
我收到运行时错误:
'无法绑定到 DataSource 上的属性或列 FirstName。参数名称:dataMember'
问题:如何将具有一组动态自定义属性的 System.Dynamic.ExpandoObject(或 System.Dynamic.DynamicObject)实例绑定到 Windows 窗体(文本框)控件集?
注 1:具有聚合/容器辅助类的解决方案对我来说是可以的。
注意 2:我花了几个小时在谷歌上搜索并尝试应用不同的技术(包括我在 StackOverflow 上找到的技术),但我失败了。
这是基于 Hans Passant 提示的“优雅”解决方案:
c# - 使用 JSON.NET 将属性反序列化为 ExpandoObject
例如,有一个像下一个这样的对象:
它是这样使用的:
如果我反序列化通过序列化上述实例获得的 JSON 字符串Data
,即使我提供了属性,ExpandoObjectConverter
它也不会反序列化为ExpandoObject
:
如何反序列化分配有匿名对象的类属性,或者至少不将具体类型作为ExpandoObject
?
编辑:
有人回答说我可以只使用动态对象。这对我不起作用。我知道我可以这样做,但事实并非如此,因为我需要一个 ExpandoObject。谢谢。
编辑2:
其他一些用户回答我可以将 JSON 字符串反序列化为ExpandoObject
. 这不是这个问题的目标。我需要反序列化具有动态属性的具体类型。在 JSON 字符串中,此属性可以是关联数组。
vb.net - ExpandoObject 在 vb.net 和 c# 中的工作方式不同
在从这里https://github.com/facebook-csharp-sdk/facebook-winforms-sample转换一些代码之后,isnt acseptig 代码就像parameters.client_id
这是我遇到问题的部分
c# - 使用 LINQ,是否可以从 Select 语句中输出动态对象?如果是这样,怎么做?
目前在 LINQ 中,以下编译和工作正常:
但是,过去几个版本的 .NET/C# 扩展了动态对象的作用,例如,ExpandoObject
我想知道是否有办法基本上做到这一点:
显然,我已经尝试过上面的代码但没有成功,但似乎我遗漏了一些东西。
.net - 如何使用 ExpandoObject 重载方法?
我有以下 expando 对象
我定义CalcAge
了计算年龄的方法..我想添加具有如下参数的重载方法
我该如何实现它ExpandoObject
,我可以在其中执行以下操作?
c# - C#中使用动态类型、动态对象和expando对象的模式/问题
在对 C# 中的 Dynamic Objects 和 Expando Objects 进行了一些研究之后,我最近意识到了 dynamic 关键字
我可以理解它非常酷,但是除了 ASP.NET MVC 中的 ViewBag 之外,我正在努力寻找要使用的应用程序。
所以我正在寻找任何可以使用 Dynamic 和 Expando 对象的设计模式或可以使用动态对象优雅地解决的问题示例......