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:
スタックトレース:
未処理の例外。 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)
これは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
あなたの場合、後者の解決策は問題ありませんが、パスを入力として使用します。