2

Помогите, пожалуйста, разобраться, никак не могу понять Deserialize в C#.
Мне нужно из файла .json считать в объект класса данные и вывести на экран.

public void GetPerson()
{
 var PesonJson = File.ReadAllText("Person.json");
 Person person = JsonSerializer.Deserialize<Person>(PesonJson);
 Console.WriteLine(person.Name);
} 

Выдает исключение:

System.Text.Json.JsonException:
"The JSON value could not be converted to JsonApp.Model.Person. Path:
$ | LineNumber: 0 | BytePositionInLine: 1."

public class Person
{
 public string Name { get; set; }
 public int Age { get; set; }
}

Json файл

[
 {
 "Name": "Tom",
 "Age": 37
 },
 {
 "Name": "Jhon",
 "Age": 28
 },
 {
 "Name": "Emma",
 "Age": 29
 },
 {
 "Name": "Shara",
 "Age": 39
 }
]
задан 20 янв. 2024 в 12:28
11
  • 1
    как задать хороший вопрос Commented 20 янв. 2024 в 12:30
  • 2
    Что делаю ни так? - это вы нам скажите, что у вас там не так. Пока мы видим лишь вызов метода, без JSON, без класса, без вообще какой либо информации... Commented 20 янв. 2024 в 12:33
  • Какое исключение бросается, что выводится на экран, предоставьте объект Person, Покажите ваш .json файл. Commented 20 янв. 2024 в 12:39
  • 2
    А, так у вас массив Person. Commented 20 янв. 2024 в 13:52
  • 2
    Хм, а я набирал обороты?) Я вас изначально прошу дать всю нужную информацию, без претензий и прочего. Я вам даже дал пример, чтоб вы поняли почему я прошу эти данные. Не расценивайте много текста сразу каким-то триггером на агр. Вот вы дали класс и JSON, сразу видно что вы пихаете массив (в JSON он помечается как[]) в один конкретный класс, когда как должно быть Person[] (массив персон). Видите, сразу ответы пошли, ну а без этих данных на вопрос просто невозможно дать ответ, ибо в JSON и в классе у вас может быть что угодно. На будущее, пожалуйста, все данные сразу. Commented 20 янв. 2024 в 14:21

1 ответ 1

5

Для понимания, что происходит, выполните этот код:

using System;
using System.Text.Json;
using System.IO;
public class Person {
 public string Name { get; set; }
}
static class Program {
 static void GetPerson() {
 var PesonJson = File.ReadAllText("Person.json");
 Person person = JsonSerializer.Deserialize<Person>(PesonJson);
 Console.WriteLine(person.Name);
 }
 static void PutPerson() {
 File.WriteAllText("Person.json", JsonSerializer.Serialize<Person>(new Person() { Name = "Oleg" }));
 }
 static void Main() {
 PutPerson();
 GetPerson();
 }
}

Код создаёт экземпляр класса Person и сохраняет его JSONом в файл, а потом читает оттуда.

Подставьте своё определение класса Person. После выполнения посмотрите содержимое файла "Person.json".

У вас проблема в том, что в файле список или массив Person, который нужно читать так:

Person[] persons = JsonSerializer.Deserialize<Person[]>(PesonJson);
Console.WriteLine(persons[0].Name);
ответ дан 20 янв. 2024 в 13:37
0

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.