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