У меня есть два класса в c#. Sub и Base. Они оба имеют свойство [Serializable]. Я только сериализую экземпляр подкласса и хочу, чтобы он оставил поле базового класса, но это не так. Я действительно не знаю, как работает сериализация, я использую сериализацию basi c. NET и сохраняю ее как строку JSON. Иногда это работает, а иногда нет, я действительно не знаю почему. Как я могу пообещать, что базовый класс будет сериализован?
Вот подкласс:
[Serializable]
public class Achivment0 : OneGameAchivment
{
private int n;
private Player p;
private float radius;
private PositionTracker track;
public Achivment0()
{
}
...
Вот первый базовый класс:
[Serializable]
public abstract class OneGameAchivment : AbstractAchivments
{
}
И вот последний базовый класс:
[Serializable]
public class AbstractAchivments
{
public static int MAX_RANK = 5;
// Serialized filed
public int rank; // 0 - MAX_RANK
public string name;
public bool initialized;
public bool help;
public AbstractAchivments()
{
}
...
У меня есть объект, который содержит подкласс, вот он:
public class AchivmentData
{
private static AchivmentData singelton = null;
private static string save_string = "achivments_save_file";
public int current_version;
public List<AbstractAchivments> list;
private AchivmentData()
{
}
private void SetData()
{
Debug.Log("Created Achivment Data");
list = new List<AbstractAchivments>();
current_version = AppInfo.version;
list.Add(new Achivment0());
list.Add(new Achivment1());
list.Add(new Achivment2());
list.Add(new Achivment3());
list.Add(new Achivment4());
list.Add(new Achivment5());
list.Add(new Achivment6());
}
public List<AbstractAchivments> GetList()
{
return list;
}
public static AchivmentData Create()
{
if (singelton == null)
{
singelton = Restore();
if (singelton == null || (AppInfo.version > singelton.current_version))
{
singelton = new AchivmentData();
singelton.SetData();
singelton.Save();
}
}
return singelton;
}
public static AchivmentData Restore()
{
string p = PlayerPrefs.GetString(save_string);
if (p != null && p.Length > 0)
{
AchivmentData s = JsonUtility.FromJson<AchivmentData>(p);
if (s != null)
{
return s;
}
}
return null;
}
public void Save()
{
string json = JsonUtility.ToJson(this);
PlayerPrefs.SetString(save_string, json);
}
}