当返回的 List<> 包含项目时,GET 请求不起作用

GET request doesn't work when returned List<> contains items

我在处理 .NET REST 应用程序时 运行 遇到了一个奇怪的问题。我可以很好地发出各种请求,但是这个长轮询 GET 中断请求只有在 returned 列表为空时才会成功。举例说明:

public async Task<List<Person>> UpdateRequest()
{
    try
    {
        await LongPolling(10000);
    }
    catch (TaskCanceledException)
    {
        Console.WriteLine("Long polling GET was cancelled.");
        var fooList = new List<Person>();
        fooList.Add(new Person("tim", "bar")); // <- adding this line breaks the request

        return fooList;
    }

    return null; //Timeout, aka nothing happened
}

.Add() 行不存在时,调用 mysite.com/update (并随后中断长 GET) returns

<ArrayOfPerson xmlns="http://schemas.datacontract.org/stuff" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>

这是预期的,但是当 List 包含项目时,我立即得到 "Could not get a response"。 Console.Writeline 被打印出来。我是否误解了 List 在 C# 中的工作方式?或者也许我在 return 类型 Task<List<Person>>?

上出错了

编辑:尝试使用普通数组:Person[0] 是唯一可行的方法,更大的数组 "Could not get a response" 不管其中是否有项目。

显然罪魁祸首不是 Task<>。非异步方法(List<Person> as return 类型)有同样的问题。客户端根本不知道如何将自定义对象的非空列表映射到响应,事后看来这是可以理解的。

我最终在 UpdateRequest() 方法中明确地将 List 映射到 XML,导致 Task<XElement> 成为新的 return 类型。