Необработанное исключение Json Отображает данные на Blazor

#c# #json #asp.net-core #parsing #blazor

Вопрос:

Я пытаюсь отобразить файл Json, добавленный в мой проект на blazor, но я получил следующую ошибку :

    Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: The JSON value could not be converted to Blazor_fresh_project.Shared.Job[]. Path: $ | LineNumber: 0 | BytePositionInLine: 1.
System.Text.Json.JsonException: The JSON value could not be converted to Blazor_fresh_project.Shared.Job[]. Path: $ | LineNumber: 0 | BytePositionInLine: 1.
   at System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)
   at System.Text.Json.Serialization.Converters.IEnumerableDefaultConverter`2[[Blazor_fresh_project.Shared.Job[], Blazor_fresh_project.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Blazor_fresh_project.Shared.Job, Blazor_fresh_project.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].OnTryRead(Utf8JsonReaderamp; reader, Type typeToConvert, JsonSerializerOptions options, ReadStackamp; state, Job[]amp; value)
   at System.Text.Json.Serialization.JsonConverter`1[[Blazor_fresh_project.Shared.Job[], Blazor_fresh_project.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].TryRead(Utf8JsonReaderamp; reader, Type typeToConvert, JsonSerializerOptions options, ReadStackamp; state, Job[]amp; value)
   at System.Text.Json.Serialization.JsonConverter`1[[Blazor_fresh_project.Shared.Job[], Blazor_fresh_project.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].ReadCore(Utf8JsonReaderamp; reader, JsonSerializerOptions options, ReadStackamp; state)
   at System.Text.Json.JsonSerializer.ReadCore[Job[]](JsonConverter jsonConverter, Utf8JsonReaderamp; reader, JsonSerializerOptions options, ReadStackamp; state)
   at System.Text.Json.JsonSerializer.ReadCore[Job[]](JsonReaderStateamp; readerState, Boolean isFinalBlock, ReadOnlySpan`1 buffer, JsonSerializerOptions options, ReadStackamp; state, JsonConverter converterBase)
   at System.Text.Json.JsonSerializer.<ReadAsync>d__20`1[[Blazor_fresh_project.Shared.Job[], Blazor_fresh_project.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
   at System.Net.Http.Json.HttpContentJsonExtensions.<ReadFromJsonAsyncCore>d__3`1[[Blazor_fresh_project.Shared.Job[], Blazor_fresh_project.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
   at System.Net.Http.Json.HttpClientJsonExtensions.<GetFromJsonAsyncCore>d__9`1[[Blazor_fresh_project.Shared.Job[], Blazor_fresh_project.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
   at Blazor_fresh_project.Client.Pages.Sugestionpool.OnInitializedAsync() in C:UsersVFlorsourcereposBlazor_fresh_projectBlazor_fresh_projectClientPagesSugestionpool.razor:line 40
   at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)
 

Вот мои сценарии:

Страница бритвы «Sugestionpool.razor»

 @using Blazor_fresh_project.Shared
@page "/AskIt"

@inject HttpClient Http;



<h1>Sugesstion pool</h1>
@if(Jobs==null)
{
    <p><em>Loading....</em></p>
}
else
{

<table class="table">
    <thead>
        <tr>
            <th scope="col">#</th>
            <th scope="col">Name of job</th>
            <th scope="col">State of job</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            @foreach (Job job in Jobs)
            {
                <td>@job.Key</td>
                <td>@job.Value</td>
            }
        </tr>
    </tbody>
</table>
}
@code {

    private List<Job> Jobs;
    protected override async Task OnInitializedAsync()
    {
        Jobs = await Http.GetFromJsonAsync<List<Job>>("sample-data/job.json");
    }
}
 

классная работа.cs

 using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Blazor_fresh_project.Shared
{
    public class Job
    {
        [Required]
        public string Value { get; set; }
        [Required]
        public string Key { get; set; }
    }
}
 

Файл Json «job.json» :

 {
  "ArrayOfDataManager": {
    "-xmlns:xsd": "http://www.w3.org/2001/XMLSchema",
    "-xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",

      {
        "Key": "Are you alive?",
        "Value": "true"
      },
      {
        "Key": "Is it working?",
        "Value": "true"
      },
      {
        "Key": "Working ?",
        "Value": "false"
      },
      {
        "Key": "can you tell me what are yu doing",
        "Value": "true"
      },
      {
        "Key": "can you tell me what ...?",
        "Value": "false"
      }

  }
}
 

Я пытался сделать это :

  1. задания как задание[] вместо списка.
  2. Измените Job.cs : значение как bool.
  3. Удалите в моем файле Json 4 первые строки и добавьте [] вокруг данных.

Есть какие-нибудь предложения?

Ответ №1:

Это действительно ваш JSon. Массив (или список) должен выглядеть следующим образом

 [
  {
    "Key": "Are you alive?",
    "Value": "true"
  },


  {
    "Key": "can you tell me what ...?",
    "Value": "false"
  }
]
 

Комментарии:

1. На самом деле это был xml-файл, преобразованный в json при запуске, я попробовал это решение, которое на самом деле было хорошим, но чтобы применить изменения, мне пришлось сбросить chrome, спасибо за ответ и помощь 😉