System.Text. Json .JsonException: значение JSON не может быть преобразовано - PullRequest
2 голосов
/ 28 января 2020

Я использую Ubuntu и делаю tnet 3.1, работаю с расширением vscode c#.

Мне нужно создать список из файла JSON, мой контроллер выполнит некоторые вычисления с этой моделью Список, который я передам ему

Я следовал эти документы примеры

Итак, вот мой код и ошибка, которую я получаю

Сначала Я думал, что моя ошибка в том, что в модели мои атрибуты были char и C#, как я видел, не может интерпретировать двойные кавычки для char, это должны быть простые кавычки. Прежде чем тратить время на его удаление, я просто изменил объявления типов на строки, и это та же ошибка.

Может кто-нибудь мне помочь?

ElevadorModel

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:

enter image description here

Stacktrace:

Необработанное исключение , System.Text. Json .JsonException: значение JSON не удалось преобразовать в ProvaAdmissionalCSharpApisul.ElevadorModel. Путь: $ | LineNumber: 0 | BytePositionInLine: 1. в System.Text. Json .ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue (тип propertyType) в System.Text. Json .JsonSerializer.HandleStartArray (параметры JsonSerializerOptions * читатель системы * читатель * читатель). .JsonSerializer.ReadCore (параметры JsonSerializerOptions, Utf8JsonReader & reader, ReadStack & readStack) в System.Text. Json .JsonSerializer.ReadCore (параметры типа returnType, JsonSerializerOptions, Utf8JsonReader & reader) в 10 System.Text. json, Введите returnType, параметры JsonSerializerOptions) в System.Text. Json .JsonSerializer.Deserialize [TValue] (параметры String json, JsonSerializerOptions) в ProvaAdmissionalCSharpApisul.Program.Main (аргументы строки []) в / home / repos / clones / teste.apisul / C # / Program.cs: строка 25

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Ваш ввод json имеет массив в качестве базового токена, тогда как вы ожидаете объект. Вам нужно изменить десериализацию на массив объектов.

var elevadoresModels = JsonSerializer.Deserialize<List<ElevadorModel>>(jsonString);
elevadoresModel = elavoresModels.First();
2 голосов
/ 28 января 2020

Ваш ввод JSON представляет собой массив моделей, однако вы пытаетесь десериализовать его в одну модель.

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