【发布时间】:2011-11-11 03:04:16
【问题描述】:
如果 AJAX 调用成功,我想返回一个带有 Success = true 的简单对象
public ActionResult Foo(int id)
{
// ...
return Json(new {Success=true});
}
这很好用,我的 javascript 接收到的对象看起来像
{ Success : true }
但是因为返回的对象是匿名类型,所以我不能在我的测试中执行(类似的)以下操作:
var result = (JsonResult)controller.AddNote(id, message);
dynamic data = result.Data;
// Assert
Assert.That(data.Success, Is.EqualTo(true));
所以我尝试返回一个 ExpandoObject,它允许测试以我想要的方式工作,但在 AJAX 响应中发回的 JSON 是一团糟,as detailed in this question。
[{"Key":"Success","Value":true}]
是否有一种简单、干净的方法来实现看起来应该很容易的事情,或者是像链接问题中那样实现一些自定义序列化的唯一方法?
【问题讨论】:
-
您在单元测试中获得的 result.Data 不能包含 json 数据,因为 jsonResult 序列化程序仅在单元测试中不运行的 ExecuteResult 方法中运行。 result.Data 中的“数据”只是您在 AddNote/Foo 操作中分配的匿名数据。你测试的不是json数据!
标签: asp.net-mvc-3 dynamic expandoobject