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