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
在您的情况下,后一种解决方案很好,但将路径作为输入。
我正在使用 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
在您的情况下,后一种解决方案很好,但将路径作为输入。