gpt4 book ai didi

c# - 如何将对象包装在动态对象中?

转载 作者:行者123 更新时间:2023-11-30 22:35:53 25 4
gpt4 key购买 nike

给定一个 System.Object,我如何获得一个动态对象来访问它可能拥有的任何成员。

具体来说,我想对返回 JsonResult 的 ASP.NET MVC 3 Controller 操作进行单元测试。 JsonResult 具有 object 类型的 Data 属性。我用匿名类型填充这个对象:

return Json(new { Success = "Success" });

在我的测试中,我想做类似的事情

var result = controller.Foo();

Assert.That(((SomeDynamicType)result.Data).Success, Is.EqualTo("Success"));

这是怎么做到的?

更新
虽然 result.Dataobject 类型,但在 Watch 窗口中检查它会显示它具有以下类型:

{
Name = "<>f__AnonymousType6`1"
FullName = "<>f__AnonymousType6`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
}
System.Type {System.RuntimeType}

最佳答案

匿名类型是内部的,动态 api 由编译器以尊重该保护的方式调用。使用 ImpromptuInterface,在 nuget 中可用的开源,它有一个 ImpromptuGet类将允许您包装您的匿名类型并将使用动态 api,就像来自匿名类型本身一样,因此您没有保护问题。

//using ImpromptuInterface.Dynamic
Assert.That(ImpromptuGet.Create(result.Data).Success, Is.EqualTo("Success"));

关于c# - 如何将对象包装在动态对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7263755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com