System.Text.Json.JsonException: JSON 值无法转换

System.Text.Json.JsonException: The JSON value could not be converted

我正在使用 Ubuntu 和 dotnet 3.1,运行 vscode 的 c# 扩展。

我需要从 JSON 文件创建一个列表,我的控制器将使用我将传递给它的模型列表进行一些计算

我遵循了[这些文档][1] 个示例

所以,这是我的代码和我遇到的错误

首先,我认为我的错误是因为在模型中我的属性是 char 和 C#,据我所见,无法解释 char 的双引号,应该是单引号。在浪费时间删除它之前,我只是将我的类型声明更改为字符串,这是同样的错误。

有人可以帮助我吗?

电梯模型

using System.Collections.Generic;

namespace Bla
{
    public class ElevadorModel
    {
        public int andar { get; set; }
        public string elevador { get; set; }
        public string turno { get; set; }
    }

}

Program.cs:

class Program
    {
        static void Main(string[] args)
        {

            var path = "../input.json";

            string jsonString;
            
            ElevadorModel elevadoresModel = new ElevadorModel();

            jsonString = File.ReadAllText(path); //GetType().Name = String

            Console.WriteLine(jsonString); //WORKS           

            elevadoresModel = JsonSerializer.Deserialize<ElevadorModel>(jsonString);

        }

您的输入 JSON 是一个模型数组,但是您正试图将其反序列化为单个模型。

var models = JsonSerializer.Deserialize<List<ElevadorModel>>(jsonString);

您的输入 json 有一个数组作为基本标记,而您期望的是一个对象。您需要将反序列化更改为对象数组。

var elevadoresModels = JsonSerializer.Deserialize<List<ElevadorModel>>(jsonString);
elevadoresModel = elavoresModels.First();

这也是Blazor-Client端的问题。对于那些调用单个对象的人
例如 ClassName = await Http.GetFromJsonAsync<ClassName>($"api/ClassName/{id}");

这将无法反序列化。使用相同的 System.Text.Json 可以通过以下方式完成:

List<ClassName> ListName = await Http.GetFromJsonAsync<List<ClassName>>($"api/ClassName/{id}");

您可以使用数组或列表。出于某种原因 System.Text.Json,没有给出错误并且能够成功反序列化。

要访问您的对象,知道它是单个对象,请使用:

ListName[0].Property

在您的情况下,后一种解决方案很好,但将路径作为输入。