web-dev-qa-db-fra.com

System.text.json.jsonexception: la valeur JSON n'a pas pu être convertie

J'utilise Ubuntu et DotNet 3.1, exécutant l'extension C # de VSCODE.

J'ai besoin de créer une liste à partir d'un fichier JSON, mon contrôleur fera des calculs avec cette liste de modèle que je vais passer à elle.

J'ai suivi [ces documents] [1] exemples

Donc, voici mon code et l'erreur que je reçois

Premièrement, j'ai pensé que mon erreur était parce que lors de modèles mes attributs étaient Char et C #, pour ce que j'ai vu, ne peut pas interpréter à double guilleme de caractères, il devrait s'agir de guillemets simples. Avant de perdre du temps, je viens de changer mes déclarations de type vers des chaînes et c'est la même erreur.

Est-ce que quelqu'un peut m'aider?

Élévateur

using System.Collections.Generic;

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

}

Programme.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);

        }
8
nanquim

Ceci est également un problème au côté de la clientèle Blazor. Pour ceux qui appellent un seul objet
[.____] E.g ClassName = await Http.GetFromJsonAsync<ClassName>($"api/ClassName/{id}");

Cela ne voudra pas désérialiser. En utilisant le même système.text.json, il peut être fait par:

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

[.____] Vous pouvez utiliser un tableau ou une liste. Pour une raison quelconque System.Text.json, ne donne pas d'erreurs et il est capable de désérialiser avec succès.

[.____] Pour accéder à votre objet, sachant qu'il s'agit d'un seul objet d'objet:

[.____] ListName[0].Property

[.____] Dans votre cas, cette dernière solution est bien mais avec le chemin comme entrée.

0
Xserge