Привет всем, мне нужна помощь. Что мне нужно изменить в этом коде, чтобы иметь возможность сериализовать (сохранить) этот файл?
Я пытаюсь создать файл инвентаря, который будет сохранять созданные предметы (этот, в частности, сохраняет созданные компоненты), у меня есть почти идентичный код для сохранения созданного оружия. Поиск в сети Я не смог найти способ сериализации этого объекта, потому что он использует параметры, но мне нужно добавить данные в этот список и сохранить его. Есть ли способ обойти это? если да как? СПАСИБО!
ошибка, которую я получаю:
InvalidOperationException: ComponentDB.ItemEntry не может быть сериализовано, поскольку у него нет конструктора без параметров.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System;
using System.Linq;
public class ComponentDB : MonoBehaviour
{
public ItemDatabase itemDB;
public string Slot;
public static ComponentDB ins;
void Awake()
{
ins = this;
Slot = "Slot1";
}
public void SaveItems()
{
XmlSerializer serializer = new XmlSerializer(typeof(ItemDatabase));
FileStream stream = new FileStream(Application.dataPath + "/StreamingAssets/Save/" + Slot + "CraftedComp.xml", FileMode.Create);
serializer.Serialize(stream, itemDB);
stream.Close();
}
public void LoadItems()
{
XmlSerializer serializer = new XmlSerializer(typeof(ItemDatabase));
FileStream stream = new FileStream(Application.dataPath + "/StreamingAssets/Save/" + Slot + "CraftedComp.xml", FileMode.Open);
itemDB = serializer.Deserialize(stream) as ItemDatabase;
stream.Close();
}
[Serializable]
public class ItemEntry
{
public string Name;
public string Data;
public int Amount;
public ItemEntry(string iName, string idata, int iAmount)
{
Name = iName;
Data = idata;
Amount = iAmount;
}
}
[Serializable]
public class ItemDatabase
{
public List<ItemEntry> list = new List<ItemEntry>();
}
public void ManageItemsInv(string input_name, string input_list, int input_amount)
{
ins.itemDB.list.Add(new ItemEntry(input_name, input_list, input_amount));
}
}