web-dev-qa-db-ja.com

System.Text.Json.JsonException:JSON値を変換できませんでした

Ubuntuとdotnet 3.1を使用しており、vscodeのc#拡張機能を実行しています。

JSONファイルからリストを作成する必要があります。コントローラーは、このモデルリストを使用していくつかの計算を行い、それに渡します。

私は従った これらのドキュメント

だから、ここに私のコードと私が得ているエラーがあります

最初に、私のエラーはモデルでは属性がcharとC#であったためだと思いました。時間を無駄にする前に、型宣言を文字列に変更しただけで、同じエラーが発生します。

誰かが私を助けてくれますか?

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

スタックトレース:

未処理の例外。 System.Text.Json.JsonException:JSON値をProvaAdmissionalCSharpApisul.ElevadorModelに変換できませんでした。パス:$ | LineNumber:0 | BytePositionInLine:1. System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)at System.Text.Json.JsonSerializer.HandleStartArray(JsonSerializerOptions options、Utf8JsonReader&reader、ReadStack&state)at System.Text.Jrial.Sizerrializer(Core.Jizer.Reader) options、Utf8JsonReader&リーダー、ReadStack&readStack)at System.Text.Json.JsonSerializer.ReadCore(Type returnType、JsonSerializerOptions options、Utf8JsonReader&reader)at System.Text.Json.JsonSerializer.Deserialize(String json、Type returnType、JsonSerializerOptions options)at /home/repos/clones/teste.apisul/C#/Program.cs:line 25のProvaAdmissionalCSharpApisul.Program.Main(String [] args)にある.Text.Json.JsonSerializer.Deserialize [TValue](String json、JsonSerializerOptions options)

2
tramada

これは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はエラーを出さず、正常にDeserializeできます。

オブジェクトにアクセスするには、それが単一のオブジェクトであることを知って使用します:

ListName[0].Property

あなたの場合、後者の解決策は問題ありませんが、パスを入力として使用します。

0
Xserge