powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XmlSerializer
12 сообщений из 12, страница 1 из 1
XmlSerializer
    #38858190
pijon4ik17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть список типа List<Building> buildings.

public abstract class Building
{
public double Cost { get; set; }
public ushort CadasterNumber { get; set; }
public byte CountFloors { get; set; }
public string Type { get; set; }
abstract public double AverageCost(double payment);
}



При сериализации выдает ошибку "Ошибка при создании документа XML.".

string output = "D:\\output.xml";
using (FileStream fs = new FileStream(output, FileMode.Create, FileAccess.Write))
{
XmlSerializer serializer = new XmlSerializer(buildings.GetType());
serializer.Serialize(fs, buildings);
}


Что я делаю не так?
...
Рейтинг: 0 / 0
XmlSerializer
    #38858195
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pijon4ik17,
А разве можно создать экземпляр абстрактного класса?
...
Рейтинг: 0 / 0
XmlSerializer
    #38858206
pijon4ik17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А где вы видите создание экземпляра класса Building?
...
Рейтинг: 0 / 0
XmlSerializer
    #38858230
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pijon4ik17,
XmlSerializer внутри себя делает проверки.
...
Рейтинг: 0 / 0
XmlSerializer
    #38858243
pijon4ik17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВ , то есть список типа Building я создать могу, но сериализовать такой список не получится?
...
Рейтинг: 0 / 0
XmlSerializer
    #38858251
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pijon4ik17ЕвгенийВ , то есть список типа Building я создать могу, но сериализовать такой список не получится?
Создать можно, но добавить в него можно только не абстрактных наследников Building!
...
Рейтинг: 0 / 0
XmlSerializer
    #38858266
pijon4ik17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так и есть.Список состоит из неабстрактных наследников.Я не спрашивал почему не могу туда добавить запись.
Суть вопроса была: Почему не сериализует существующий заполненный список?
...
Рейтинг: 0 / 0
XmlSerializer
    #38858272
pijon4ik17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сериализация через BinaryFormatter проходит успешно.

IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(output, FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, buildings);

Но нужна XmlSerializer.
...
Рейтинг: 0 / 0
XmlSerializer
    #38858282
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
    [Serializable]
    [XmlInclude(typeof(BuildingImpl))]   // см. сюда
    public abstract class Building
    {
        public double Cost { get; set; }
        public ushort CadasterNumber { get; set; }
        public byte CountFloors { get; set; }
        public string Type { get; set; }
        abstract public double AverageCost(double payment);
    }
    
    public class BuildingImpl : Building
    {
        public override double AverageCost(double payment)
        {
            return default(double);
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            List<Building> list = new List<Building>(new[] { new BuildingImpl() { CadasterNumber = 1, Cost = 11, CountFloors = 5, Type = "house" },  new BuildingImpl() { CadasterNumber = 2, Cost = 22, CountFloors = 222, Type = "skygrabber" }, });

            XmlSerializer ser = new XmlSerializer(typeof(List<Building>));
            using (var ms = new MemoryStream())
            {
                ser.Serialize(ms, list);
            }

            Console.ReadLine();
        }
    }
...
Рейтинг: 0 / 0
XmlSerializer
    #38858300
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, и ведь что характерно - если вглядеться в детали сообщения об ошибке - там это иностранным по белому написано...
Ошибка автора только одна - он "не читатель" :)
...
Рейтинг: 0 / 0
XmlSerializer
    #38858306
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserArm79, и ведь что характерно - если вглядеться в детали сообщения об ошибке - там это иностранным по белому написано...
Ошибка автора только одна - он "не читатель" :)
Ну дык, я и посмотрел сообщение об ошибке :-)
...
Рейтинг: 0 / 0
XmlSerializer
    #38858471
pijon4ik17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79, спасибо. То, что нужно.
Про необходимость " [XmlInclude(typeof(obj.GetType())] " я не знал.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XmlSerializer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]