Json Deseralizer 无法将字符串转换为 guid

DBa*_*nkx 1 c# json.net asp.net-web-api .net-core

我目前正处于项目的集成测试阶段,在尝试测试端点以查看我的数据库是否返回某些任务时遇到错误。我的域对象如下所示:

public class Task
    {
        public Guid Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }

        [Column(TypeName = "decimal(18,2)")] 
        public decimal? InitialPrice { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

我的端点的基本测试代码

[Fact]
        public async Task Should_return_All_Tasks_with_ok_statusCode()
        {
            client.SetFakeBearerToken((object) token);
            
            var response = await client.GetAsync("/api/v1/tasks");

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            var json = await response.Content.ReadAsStringAsync();
            var data = JsonConvert.DeserializeObject<List<Task>>(json);
            data.Count.Should().BeGreaterThan(0);
        }
Run Code Online (Sandbox Code Playgroud)

当我运行测试时出现错误

Newtonsoft.Json.JsonReaderException: Could not convert string to integer: 64fa643f-2d35-46e7-b3f8-31fa673d719b. Path '[0].id', line 1, position 45.
Run Code Online (Sandbox Code Playgroud)

我还尝试使用 webapi.client 包中的 ReadAsAsync<List>() 方法,但仍然遇到相同的错误。

对我尝试测试的端点的 api 调用将给出:

[
  {
    "id": "64fa643f-2d35-46e7-b3f8-31fa673d719b",
    "title": "Garden Trimming in Lagos Ajah",
    "description": "Please my garden needs trimmin, Im in lagos",
    "initialPrice": 20.3
  }
]
Run Code Online (Sandbox Code Playgroud)

我将不胜感激

qua*_*aam 5

您将Task类命名为System.Threading.Tasks.Task与 .Net 框架中的对象相同的名称。该System.Threading.Tasks.Task有一个intID属性。您要反序列化的代码实际上是试图将您的 JSON 反序列化为System.Threading.Tasks.Task对象。

要解决此问题,您需要重命名您的Task类(我建议这样做),或者Task在调用JsonConvert.DeserializeObject.