Сериализация списка классов (нескольких классов) - 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)
- {
- ...
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д