私は次のような方法を持っていました:
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 });
}
テストは例外をスローするようになりました。
なぜこれが起こっているのか、そしてどのように修正するのか誰かが説明できますか?