Как доработать систему сохранения?
Делаю систему сохранений, работает с 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;
}
}