Сериализация и десериализация списка интерфейсов - C#
Формулировка задачи:
Привет.
Есть интерфейс Shape. Есть несколько реализаций этого интерфейса (Sphere, Box etc). Далее есть список этих фигур, объявленный в виде List<Shape> shapeList= new List<Shape>().
Необходимо сериализовать данный list и десериализовать его обратно. Сериализация и десериализация одного конкретного объекта, например, Box, проблем не вызывает, а вот как сериализовать список интерфейсов не понятно.
Пробовал сделать так:
При этом получаю вот такой xml:
Понятное дело на втором вхождении <?xml version="1.0"?> при десериализации вылетает исключение, т.к. как я понимаю сериализовывать список нужно как-то по другому.
Если пробовать сериализовать список целиком, а не каждый его объект, то вылетает исключение по поводу того, что интерфейс сериализовать нельзя, что и понятно.
Может есть у кого кусок кода для (де)сериализации подобного списка интерфейсов. Нагуглить смог только сериализацию списка конкретных объектов.
//------ private List<Shape> shapeList = new List<Shape>(); //------ string filePath = "shapes.shp"; var file = File.Create(filePath); foreach (Shape shape in shapeList) { XmlSerializer writer = new XmlSerializer(shape.GetType()); writer.Serialize(file, shape); }
<?xml version="1.0"?> <Sphere xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <radius>8</radius> <description>Шарик</description> </Sphere> <?xml version="1.0"?> <Box xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <a>2</a> <b>9</b> <c>2</c> <description>Фигура</description> </Box> <?xml version="1.0"?> <Sphere xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <radius>8</radius> <description>Шарик</description> </Sphere>
Решение задачи: «Сериализация и десериализация списка интерфейсов»
textual
Листинг программы
XmlSerializer writer = new XmlSerializer(typeof(List<IShape>), new Type[] { typeof(Box), typeof(Sphere), typeof(Pyramid) });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д