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

标签 c# anonymous-types jsonresult

我有一个返回值的方法

return new  System.Web.Mvc.JsonResult()
{                     
    Data = new
    {
        Status = "OK", 
    }
}

我需要编写一个单元测试来验证 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);

最佳答案

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

dynamic foo = ret.Data;
Assert.AreEqual("OK", foo.status);

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

或者,只使用反射。

关于c# - 如何读取匿名类型的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13981429/

相关文章:

asp.net-mvc - 使用 ASP.NET MVC 的 JsonResult 类返回多个对象

c# - 如何使用 LINQ to Entities 仅包含一些内部列表项

c# - 如何在docker中设置dotnet core的环境?

c# - 如何在 C# 匿名类型中声明 "Key"字段?

c# - 如何从匿名类型列表中迭代?

Android-我从服务器获取 PDF(或)JPG(或)PNG 文件形式的 Json 响应。如何处理它以供用户查看(或)下载

asp.net-mvc - Actionresult 与 JSONresult

c# - 单一方法即扩展方法之间的调用不明确

用于获取所有可能匹配项的 C# 正则表达式

powershell - 在PowerShell中按名称设置嵌套对象属性的值