如何读取匿名类型的属性?

dev*_*747 12 c# anonymous-types jsonresult

我有一个返回的方法

return new  System.Web.Mvc.JsonResult()
{                     
    Data = new
    {
        Status = "OK", 
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要编写一个单元测试,我需要验证它jsonResult.Data.status= "OK".

我如何阅读状态属性?

更新:我尝试了[assembly:InternalsVisibleTo("TestingAssemblyName")],但这没有帮助.我一直收到错误{"'System.Web.Mvc.JsonResult'不包含'Status'的定义"}

此外,我想我不想修改我正在测试的代码.

所以我接受了Jon的建议并使用了反思.

        var type = jsonResult.Data.GetType();

        var pinfo = type.GetProperty("Status");

        string  statusValue = pinfo.GetValue(jsonResult.Data,null).ToString();

        Assert.AreEqual("OK", statusValue);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 18

最简单的方法可能是使用动态类型:

dynamic foo = ret.Data;
Assert.AreEqual("OK", foo.status);
Run Code Online (Sandbox Code Playgroud)

请注意,您需要使用[InternalsVisibleTo]以便让您的单元测试程序集访问生产程序集中的匿名类型,因为它将通过internal访问生成.

或者,只需使用反射.


Sim*_*ead 6

dynamic:

dynamic testObject = YourMethodThatReturnsDynamicObject().Data;
Assert.AreEqual("OK", testObject.Status);
Run Code Online (Sandbox Code Playgroud)