Как правильно сериализовать и десериализовать коллекцию объектов разных типов? - 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; }
}
}