我的方法看起来像:
public JsonResult GetSpecies()
{
var species = new List<SpeciesType> {
new SpeciesType{ Id=1, Name="Giraffe" },
new SpeciesType{ Id=2, Name="Wolf" }
};
return Json(new { Species = species });
}
然后我进行了组装,使其内部可见我的测试项目并进行了测试:
[TestMethod]
public void GetSpecies_ReturnsJsonVersionOfNameAndId()
{
...
var result = controller.GetSpecies();
dynamic data = result.Data;
Assert.AreEqual(1, data.Species[0].Id);
Assert.AreEqual("Giraffe", data.Species[0].Name);
Assert.AreEqual(2, data.Species[1].Id);
Assert.AreEqual("Wolf", data.Species[1].Name);
}
所以这很好。
我改变了方法以返回数组中的匿名类型:
public JsonResult GetSpecies()
{
var species = new List<SpeciesType> {
new SpeciesType{ Id=1, Name="Giraffe" },
new SpeciesType{ Id=2, Name="Wolf" }
}.Select(x => new { Id = x.Id, Name = x.Name });
return Json(new { Species = species });
}
现在测试会抛出异常。
任何人都可以解释为什么会发生这种情况以及如何解决?
答案 0 :(得分:3)
您现在没有提供List<T>
- 您的Species
属性只是一个序列。我不知道它是如何在JSON中表示的,如果实际越过网络,它可能没问题 - 但是确保Species
值实际上是最简单的清单:
var species = new List<SpeciesType> {
new SpeciesType{ Id=1, Name="Giraffe" },
new SpeciesType{ Id=2, Name="Wolf" }
}
.Select(x => new { Id = x.Id, Name = x.Name })
.ToList();