Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XmlSerializer / 12 сообщений из 12, страница 1 из 1
20.01.2015, 10:44
    #38858190
pijon4ik17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
Добрый день.
Есть список типа 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
20.01.2015, 10:46
    #38858195
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
pijon4ik17,
А разве можно создать экземпляр абстрактного класса?
...
Рейтинг: 0 / 0
20.01.2015, 10:53
    #38858206
pijon4ik17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
А где вы видите создание экземпляра класса Building?
...
Рейтинг: 0 / 0
20.01.2015, 11:06
    #38858230
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
pijon4ik17,
XmlSerializer внутри себя делает проверки.
...
Рейтинг: 0 / 0
20.01.2015, 11:15
    #38858243
pijon4ik17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
ЕвгенийВ , то есть список типа Building я создать могу, но сериализовать такой список не получится?
...
Рейтинг: 0 / 0
20.01.2015, 11:23
    #38858251
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
pijon4ik17ЕвгенийВ , то есть список типа Building я создать могу, но сериализовать такой список не получится?
Создать можно, но добавить в него можно только не абстрактных наследников Building!
...
Рейтинг: 0 / 0
20.01.2015, 11:30
    #38858266
pijon4ik17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
Так и есть.Список состоит из неабстрактных наследников.Я не спрашивал почему не могу туда добавить запись.
Суть вопроса была: Почему не сериализует существующий заполненный список?
...
Рейтинг: 0 / 0
20.01.2015, 11:35
    #38858272
pijon4ik17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
Сериализация через BinaryFormatter проходит успешно.

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

Но нужна XmlSerializer.
...
Рейтинг: 0 / 0
20.01.2015, 11:40
    #38858282
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
Код: 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
20.01.2015, 11:49
    #38858300
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
Arm79, и ведь что характерно - если вглядеться в детали сообщения об ошибке - там это иностранным по белому написано...
Ошибка автора только одна - он "не читатель" :)
...
Рейтинг: 0 / 0
20.01.2015, 11:51
    #38858306
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
buserArm79, и ведь что характерно - если вглядеться в детали сообщения об ошибке - там это иностранным по белому написано...
Ошибка автора только одна - он "не читатель" :)
Ну дык, я и посмотрел сообщение об ошибке :-)
...
Рейтинг: 0 / 0
20.01.2015, 14:02
    #38858471
pijon4ik17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlSerializer
Arm79, спасибо. То, что нужно.
Про необходимость " [XmlInclude(typeof(obj.GetType())] " я не знал.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XmlSerializer / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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