感谢您的期待!
我正在开发一个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对的字典(其中一些值本身就是字典)?是否有助手类或某种我缺少的动态方法?
答案 0 :(得分:1)
为什么不使用像JSON.NET这样的东西让它将对象转换为json。然后,您可以使用该json数据并设置一些嵌套限制,或者您可以记录整个json字符串本身。