Как правильно сериализовать и десериализовать коллекцию объектов разных типов? - C#

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

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

имеются классы, допустим
        private abstract class Shape {
            public int X { get; set; }
            public int Y { get; set; }
        }
 
        private class Circle : Shape {
            public int Radius { get; set; }
        }
 
        private class Polygon : Shape {
            public int AngleCount { get; set; }
        }
И коллекция
        List<Shape> List = new List<Shape>()
        {
            new Circle() {X=1,Y=1,Radius=2},
            new Circle() {X=1,Y=2,Radius=4},
            new Polygon() {X=0,Y=1,AngleCount= 4},
            new Circle() {X=1,Y=4,Radius=2},
        };
Как лучше организовать сохранение в файл такой коллекции?

Решение задачи: «Как правильно сериализовать и десериализовать коллекцию объектов разных типов?»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Runtime.Serialization.Formatters.Binary;
 
namespace ConsoleApplication212
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<Shape>()
            {
                new Circle() {X=1,Y=1,Radius=2},
                new Circle() {X=1,Y=2,Radius=4},
                new Polygon() {X=0,Y=1,AngleCount= 4},
                new Circle() {X=1,Y=4,Radius=2},
            };
 
            //file name
            var file = "c:\\temp.bin";
 
            //save
            using (var fs = new FileStream(file, FileMode.Create))
            using (var zip = new GZipStream(fs, CompressionMode.Compress))
                new BinaryFormatter().Serialize(zip, list);
 
            //load
            using (var fs = new FileStream(file, FileMode.Open))
            using (var zip = new GZipStream(fs, CompressionMode.Decompress))
                list = (List<Shape>)new BinaryFormatter().Deserialize(zip);
 
            Console.ReadLine();
        }
    }
 
 
 
    [Serializable]
    abstract class Shape
    {
        public int X { get; set; }
        public int Y { get; set; }
    }
 
    [Serializable]
    class Circle : Shape
    {
        public int Radius { get; set; }
    }
 
    [Serializable]
    class Polygon : Shape
    {
        public int AngleCount { get; set; }
    }
}

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


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

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

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