【发布时间】:2019-04-16 06:43:12
【问题描述】:
我从控制器方法返回 IActionResult 和匿名对象的值。
如何再次取出数据?
这是简化为问题的控制器方法:
[HttpPost]
public async Task<IActionResult> UploadFile(IFormFile file)
{
long size = file.Length;
return Ok(new { count = 1, size });
}
然后我得到.Value 属性,它是一个object 并使其成为dynamic。
但是不,它不被识别。
[Fact]
public async Task UploadFileTest()
{
// # Given.
var formFile = new Mock<IFormFile>();
var sut = new HomeController(null);
// # When.
IActionResult result = await sut.UploadFile(formFile.Object);
// # Then.
OkObjectResult okResult = (OkObjectResult)result; // Ok.
dynamic dynValue = okResult.Value; // Ok.
var count = dynValue.count; // Not ok.
}
预期结果:
count 应该是 1。
实际结果:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:“object”不包含“count”的定义
【问题讨论】:
-
你试过这样 =>
dynamic dynValue = okResult.Value as dynamic;吗? 或dynamic dynValue = okResult.Value as ExpandoObject;? -
@er-sho 尝试将
dynValue转换为dynamic不会做任何事情,因为它已经被声明为dynamic。因此,当尝试转换为ExpandoObject时,所发生的一切就是dynValue变为空。dynamic和ExpandoObject不是一回事。加上尝试。
标签: c# anonymous-class