Как доработать систему сохранения?

Делаю систему сохранений, работает с JSON, и понадобился код для сохранения структуры. Вот наиболее нужный кусок кода для поиска проблемы:

public void SaveData(ref Data data){
data.money = this.money;
data.score = this.score;

    for (int i = 0; i < objects.Length; i++)
    {
        
            string id = objects[i].id;
            string content = objects[i].content;
            string nameAchivement = objects[i].nameAchivement;
            float requirement = objects[i].requirement;
            float reward = objects[i].reward;
            bool alreadyTaked = objects[i].alreadyTaken;
            AchivementClass achivement = new AchivementClass(id, nameAchivement, content, requirement, reward, alreadyTaked);
            data.achivement.Add(achivement);
    }
    data.achivement.Distinct().ToList();

Структуру записывает, но дублирует информацию, смотрел разные варианты и либо не подходит, либо не работает. Сам я пока не могу понять как сделать лучше.

В идеале надо добиться не удаления дубликатов, а сохранения точного количество элементов, возможно через банальный if

{
"money": 0.0,
"score": 0.0,
"hiscore": 0.0,
"achivement": [
    {
        "id": "",
        "nameAchivement": "Reach10coins",
        "content": "Заработай 10 монет",
        "requirement": 10.0,
        "reward": 20.0,
        "alreadyTaked": false
    },
    {
        "id": "",
        "nameAchivement": "Reach100coins",
        "content": "Заработай 100 монет",
        "requirement": 200.0,
        "reward": 200.0,
        "alreadyTaked": false
    },
    {
        "id": "",
        "nameAchivement": "Reach1000coins",
        "content": "Заработай 1000 монет",
        "requirement": 1000.0,
        "reward": 800.0,
        "alreadyTaked": false
    }
]

Файл перезаписывает


Ответы (1 шт):

Автор решения: DixonR

Помогло это:

public void SaveData(ref Data data){ 
    data.money = this.money;
    data.score = this.score;
    SerializableAchivementClass achivements = new SerializableAchivementClass();


    for (int i = 0; i < objects.Length; i++)
    {

        string id = objects[i].id;
        string content = objects[i].content;
        string nameAchivement = objects[i].nameAchivement;
        float requirement = objects[i].requirement;
        float reward = objects[i].reward;
        bool alreadyTaked = objects[i].alreadyTaken;
        AchivementClass achivement = new AchivementClass(id, nameAchivement, content, requirement, reward, alreadyTaked);
        achivements.Add(achivement);
        
    }

    if (achivements != data.achivement)
    {
        data.achivement = achivements;
    }
    else
    {
        data.achivement.Clear();
        data.achivement = achivements;
    }
}
→ Ссылка