Сериализация списка классов (нескольких классов) - C#
Формулировка задачи:
Ув.. Знаю, что данный вопрос неоднократно поднимался и здесь существует огромное количество тем. Но у меня ситуация нестандартного характера и все никак не могу найти удачное и корректное решение. Надеюсь на вашу помощь!
В общем задача такова:
Нужно сделать сохранение классов с заполненными полями в файл, а затем сделать загрузку из файла этих данных.
Классы выглядят так:
CustomObject - обобщенная модель (родитель для TheCar, TheShip, ThePlane)
TheCar, TheShip, ThePlane - соответственно наследуются от CustomObject, дополняя своими свойствами
При создании нового экземпляра любого из этих классов, обьект добавляется в список AllObjects а затем в список подходящий под свой тип (например Cars), по коду выше видно
Каждый класс содержит уникальный айди, который при создании обьекта инкрементируется и записывается через ObjectsCache.
***
Подводя итог, нужно сохранить в файл / загружать из файла (желательно все в одном файле)
1) списки классов:
2) Последний айди из ObjectsCache (т.е. значение incrementId)
3) А так же класс глобальных переменных GlobalVariables
Помогите пожалуйста!!!
[Serializable]
public class CustomObject
{
public int id { get; set; }
public string type { get; set; }
public string inner_name { get; set; }
public int speed {get; set;}
public int height {get; set;}
public int width {get; set;}
}
[Serializable]
public class TheCar : CustomObject
{
public Color color {get; set;}
public string mark {get; set;}
// ...
public TheCar()
{
// ...
}
}
// ...
public class ObjectsCache
{
static List<CustomObject> AllObjects { get; set; }
static List<TheCar> Cars { get; set; }
static List<ThePlane> Planes { get; set; }
static List<TheShip> Ships { get; set; }
// ...
AllObjects = new List<CustomObject>();
Cars = new List<TheCar>();
Planes = new List<ThePlane>();
Ships = new List<TheShip>();
static int incrementId = 0;
public static int NextId()
{
return ++incrementId;
}
public static void AddNewCar(TheCar car)
{
car.id = NextId();
AllObjects.Add(car);
Cars.Add(car);
}
// ...
}
public class GlobalVariables
{
public static string state { get; set; }
public static string city { get; set; }
public static string country { get; set; }
public static int time { get; set; }
// ...
}static List<CustomObject> AllObjects { get; set; }
static List<TheCar> Cars { get; set; }
static List<ThePlane> Planes { get; set; }
static List<TheShip> Ships { get; set; }Решение задачи: «Сериализация списка классов (нескольких классов)»
textual
Листинг программы
[Serializable]
public class GameState
{
public List<CustomObject> AllObjects { get; set; }
public List<TheCar> Cars { get; set; }
...
public string State { get; set; }
public string City { get; set; }
public string Country { get; set; }
public int Time { get; set; }
//
public static GameState Instance { get; private set; }
public static void CreateInstance()
{
Instance = new GameState();
}
public static void LoadInstance(string fileName)
{
using (var st = File.OpenRead(fileName))
Instance = (GameState)new BinaryFormatter().Deserialize(st);
}
public static void SaveInstance(string fileName)
{
...
}
}