C# Json generi c добавление - PullRequest
       1

C# Json generi c добавление

0 голосов
/ 03 апреля 2020

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

using System.Text.Json;

void addToJson(int myData)
{
   var data = JsonSerializer.Deserialize<scoreList>(File.ReadAllText("scoreData.json"));

   data.scores.Add(myData);

   var jsonString = JsonSerializer.Serialize<scoreList>(data);
   File.WriteAllText("scoreData.json", jsonString);
}

Я думаю, что мой код хорош, у меня просто ошибка: data. Scores.Add (myData);

А вот мой класс:

class scoreTest
    {
        public int score { get; set; }
    }

class scoreList
    {
        public List<scoreTest> scores { get; set; }
    }

Ответы [ 3 ]

1 голос
/ 03 апреля 2020

Это нормально, если все типы элементов примитивны, но если нет. Вам может понадобиться конструктор для члена. Это поможет избежать исключения нулевой ссылки при десериализации.


class scoreList { 
    public List<scoreTest> scores { get; set; } 

    //We need default constructor for initialize class member.
    public scoreList(){
        this.scores = new List<scoreTest>();
    }
}
1 голос
/ 03 апреля 2020

Нет ничего связанного с JSON, вы должны добавить правильное значение в список

void addToJson(int myData)
{
    //...
    data.scores.Add(new scoreTest { score = myData });
    //...
}

scores имеет тип List<scoreTest>, вы не можете просто добавить значение int к список, вы должны сначала создать экземпляр scoreTest со значением score равным myData

0 голосов
/ 03 апреля 2020

Для обработки десериализации / сериализации вложенных классов используйте:

    new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.All    
    };

Попробуйте:

void addToJson(int myData)
{
    var settings =  new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.All    
    }; 
    var data = JsonSerializer.Deserialize<scoreList>(File.ReadAllText("scoreData.json"), settings);

    data.scores.Add(myData);

    var jsonString = JsonSerializer.Serialize<scoreList>(data, settings);
    File.WriteAllText("scoreData.json", jsonString);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...