Сериализация списка классов (нескольких классов) - C#

Узнай цену своей работы

Формулировка задачи:

Ув.. Знаю, что данный вопрос неоднократно поднимался и здесь существует огромное количество тем. Но у меня ситуация нестандартного характера и все никак не могу найти удачное и корректное решение. Надеюсь на вашу помощь! В общем задача такова: Нужно сделать сохранение классов с заполненными полями в файл, а затем сделать загрузку из файла этих данных. Классы выглядят так:
[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; }
        
        // ...
    }
CustomObject - обобщенная модель (родитель для TheCar, TheShip, ThePlane) TheCar, TheShip, ThePlane - соответственно наследуются от CustomObject, дополняя своими свойствами При создании нового экземпляра любого из этих классов, обьект добавляется в список AllObjects а затем в список подходящий под свой тип (например Cars), по коду выше видно Каждый класс содержит уникальный айди, который при создании обьекта инкрементируется и записывается через ObjectsCache. *** Подводя итог, нужно сохранить в файл / загружать из файла (желательно все в одном файле) 1) списки классов:
static List<CustomObject> AllObjects { get; set; }
        static List<TheCar> Cars { get; set; }
        static List<ThePlane> Planes { get; set; }
        static List<TheShip> Ships { get; set; }
2) Последний айди из ObjectsCache (т.е. значение incrementId) 3) А так же класс глобальных переменных GlobalVariables Помогите пожалуйста!!!

Решение задачи: «Сериализация списка классов (нескольких классов)»

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)
            {
                ...
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы