forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Комментарии к статье "Сериализация" (http://forum.boolean.name/showthread.php?t=12647)

SBJoker 08.06.2010 23:27

Ответ: Полу урок: Сериализация. Часть 1
 
Эта тема предназначена для размещения комментариев об этой статье. - АВТОМАТ

Любопытно.
Однако я предпочитаю делать осмысленый метод сохранения, а не писать всё в кучу.

IGR 08.06.2010 23:36

Ответ: Полу урок: Сериализация. Часть 1
 
спасибо за статью !! ВИХБИ в деле !! ;)

Хотя я тож предпочитаю сохранять в каком то осмысленом виде !! Любимый хмл !! :)

Dream 09.06.2010 00:10

Ответ: Полу урок: Сериализация. Часть 1
 
Цитата:

Сообщение от SBJoker (Сообщение 149669)
Любопытно.
Однако я предпочитаю делать осмысленый метод сохранения, а не писать всё в кучу.

Согласен, не для каждого случая подойдёт, но у xml тоже есть свои преймущества, напрмиер востанновить полностью состояние обькта, не тратя на это сотню строк, также через DOM(!)(туплю) можно тоже легко работать с такой структурой. ПРи изменении какихто параметров в классе не менять код загрузчика.

SBJoker 09.06.2010 00:30

Ответ: Полу урок: Сериализация. Часть 1
 
Ну да, главное использовать инструмент по назначению. Жду ещё уроков!

pax 09.06.2010 01:48

Ответ: Полу урок: Сериализация. Часть 1
 
Спасибо за статью, всем, кто не работал с сериализацией будет полезна :). От себя хотел бы добавить:

1. В данном примере используется конструктор XmlSerializer(type). В МСДН по этому поводу написано:

Цитата:

Динамически сгенерированные сборки.
Для повышения производительности инфраструктура сериализации XML динамически генерирует сборки для сериализации и десериализации указанных типов. Инфраструктура обнаруживает и повторно использует данные сборки. Такое поведение происходит только при использовании следующих конструкторов:

XmlSerializer.XmlSerializer(Type)

XmlSerializer.XmlSerializer(Type, String)

При использовании любого другого конструктора генерируется несколько версий одной сборки, которые никогда не выгружаются, что приводит к недостаточности памяти и низкому уровню производительности. Самым простым решением является использование ранее упомянутых двух конструкторов. В противном случае необходимо кэшировать сборки в Hashtable, как указано в следующем примере.
Следовательно механизм с хэш таблицей, приведенный тут излишний. Но показать его необходимость в других случаях - правильное решение.

2. Функция WriteEntity на мой взгляд дублирует информацию в памяти аш два раза. Ее можно записать на много проще и оптимальнее:
Код:

        public static void WriteEntity(object obj, string fileFullPath)
        {
            XmlSerializer sr = GetSerializer(obj.GetType());
            using (FileStream fs = File.Create(fileFullPath))
            {
                sr.Serialize(fs, obj);
            }
        }

Вроде все что хотел сказать :)
Еще раз спасибо за статью!

IGR 10.06.2010 03:47

Ответ: Полу урок. Сериализация. Часть 2. Десериализация и параметры.
 
класс !! Аж захотелось на с_шарпе чет пописать !! :)

Dream 10.06.2010 03:50

Ответ: Полу урок. Сериализация. Часть 2. Десериализация и параметры.
 
я на это и рассчитываю xDD возможно(тоесть не исключено) я тайный вербовщик майкрософта)

IGR 10.06.2010 03:53

Ответ: Полу урок. Сериализация. Часть 2. Десериализация и параметры.
 
Цитата:

Сообщение от Dream (Сообщение 149795)
я на это и рассчитываю xDD возможно(тоесть не исключено) я тайный вербовщик майкрософта)

Ога !! Если бы счас не 2 часа ночи было, точно бы сел чет писать !! :)

pax 10.06.2010 18:53

Ответ: Комментарии к статье "Сериализация"
 
Отличная статья, в дополнение пара ссылок для тех, кому потребуется изучить данную тему подробнее:

1. Класс XmlSerializer
2. Пространство имен System.Xml.Serialization


Кроме Xml сериализации существует еще и бинарная сериализация, если кому интересно, то изучаем класс BinaryFormatter

WISHMASTER35 23.12.2012 02:19

Ответ: Комментарии к статье "Сериализация"
 
Почему такой список нельзя сохранить?
Код:

List<Base> list = new List<Base>();
list.Add( new A(1) );
list.Add( new B(2) );
list.Add( new Base() );

Пишет, что A не является примитивом? A и B являются потомками Base.

Dream 23.12.2012 04:51

Ответ: Комментарии к статье "Сериализация"
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 247297)
Почему такой список нельзя сохранить?
Код:

List<Base> list = new List<Base>();
list.Add( new A(1) );
list.Add( new B(2) );
list.Add( new Base() );

Пишет, что A не является примитивом? A и B являются потомками Base.

читай последний пример внимательно http://forum.boolean.name/showpost.p...02&postcount=3

WISHMASTER35 23.12.2012 16:18

Ответ: Комментарии к статье "Сериализация"
 
Спасибо. Вот еще интересная статья про сериализацию и полиморфизм http://www.tdoc.ru/c/dotnet/net-fram...-f2-page4.html
Там еще пара способов.
1) С помощью аннотации XmlInclude прописать базовому классу список всех наследников, что не есть гуд.
2) Классом XmlAttributes можно при сериализации задать список базовых классов. Это уже можно сделать в ран тайме, не зная списка всех потомков.


Часовой пояс GMT +4, время: 13:02.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot