1

私は次のような方法を持っていました:

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 });
            }

テストは例外をスローするようになりました。

なぜこれが起こっているのか、そしてどのように修正するのか誰かが説明できますか?

4

1 に答える 1

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();
于 2013-03-25T21:45:43.543 に答える