内存测试中的WebAPI - 获取错误序列化IQueryable

时间:2012-10-15 09:25:53

标签: asp.net-web-api

我使用以下方法进行WebAPI实现:

 public IEnumerable<Device> GetAllDevices()
 public Device GetDeviceById(int id)

看起来没问题,它在IIS或自动主机中运行时有效。正确返回JSON对象。

然而,第一种方法在我尝试使用内存服务器的单元测试中失败。

 System.InvalidOperationException : Cannot create and populate list type System.Linq.IQueryable`1[Test.Device].

这归结为Newtonsoft.Json.Serialization程序集。测试的一个例子如下:

        [Test]
    public void GET_AskingForListOfDevices_GettingOk200WithListOfDevicesInJSON()
    {
        var client = new HttpClient(InMemoryServer);
        HttpRequestMessage request = CreateRequest("api/devices", "application/json", HttpMethod.Get);

        using (HttpResponseMessage response = client.SendAsync(request).Result)
        {
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
            Assert.NotNull(response.Content);
            Assert.AreEqual("application/json", response.Content.Headers.ContentType.MediaType);

            // next line throws exc
            var content = response.Content.ReadAsAsync<IQueryable<Device>>().Result;

            Assert.AreEqual(3, content.Count());
        }

        request.Dispose();
    }

知道在哪里看?

UPDATE
下面的例子抛出了这个错误,但我找到了避免它的解决方案。只需使用IList&lt;&gt;而不是IQueryable&lt;&gt ;.它还没有回答我为什么在Fiddler工作的问题。它是否使用相同的技巧?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的情况。 IQueryable抛出异常,但是如果你使用IEnumerable那么它可以工作。