понедельник, 7 ноября 2011 г.
пятница, 21 октября 2011 г.
Автоматический вход в систему Windows XP и Windows 7
Выполнить команду:
control userpasswords2
В появившемся диалоге убрать галочку Требовать ввода имени пользователя и пароля. После нажатия OK или Применить, появится окно Автоматический вход в систему ввести имя пользователя по умолчанию и пароль, нажать OK. После этого при загрузке система будет автоматически логиниться под этим пользователем.
control userpasswords2
В появившемся диалоге убрать галочку Требовать ввода имени пользователя и пароля. После нажатия OK или Применить, появится окно Автоматический вход в систему ввести имя пользователя по умолчанию и пароль, нажать OK. После этого при загрузке система будет автоматически логиниться под этим пользователем.
Ярлыки:
Автоматический вход,
Auto login,
Windows 7,
Windows XP
Настройка Cron
Cron -- планировщик задач в Linux.Он выполняет по расписанию заданные пользователем задачи. Каждый пользователь имеет свой список таких задач. Этот список настраивается командой crontab. В соответсвии со стандартом POSIX эта команда может вызываться всего с тремя опциями:
-l -- вывод списока уже существующих задач;
-e -- переход в режим редактирования задач;
-r -- удаление список задач.
В Linux у crontab есть еще оция -u. С её помощью можно работать со списоком задач любого пользователя следующим образом:
crontab -u anyuser -l/-e/-r
Так же эта оция позволяем привязать cron любого пользователя к произвольному файлу списка задач:
crontab -u anyuser crontabfile
Перейдем к редактированию списка задач, командой crontab -e. Если вы редактируете список задачи впервые, то программа попросит выбрать из списка редактор, который бы вы хотели использовать для редактирования списка задач. Если не первый раз, то откроет редактор, который был выбран при первом запуске (обычно vi или nano).
Каждая строка планировщика имеет следующий формат:
* * * * * выполняемая_команда
^ ^ ^ ^ ^
| | | | |
| | | | +---- День недели (0 - 7) (0 или 7 -- это Воскресенье)
| | | +------ Месяц (1 - 12)
| | +-------- День (1 - 31)
| +---------- Час (0 - 23)
+------------ Минута (0 - 59)
Временные параметры можно указывать диапазоном, в слудующем формате: 0-59, или перечисление, разделяя значения запятой: 0,1,2,8.
Примеры задач:
# выводить текст 'hello' в файл test.txt каждый понедельник в 3:30
30 3 * * 1 echo hello >> test.txt
# выполнять каждую минуту обнавление рабочей копии сайта из репозитория
0-59 * * * * cd /var/www/mysite; svn update
-l -- вывод списока уже существующих задач;
-e -- переход в режим редактирования задач;
-r -- удаление список задач.
В Linux у crontab есть еще оция -u. С её помощью можно работать со списоком задач любого пользователя следующим образом:
crontab -u anyuser -l/-e/-r
Так же эта оция позволяем привязать cron любого пользователя к произвольному файлу списка задач:
crontab -u anyuser crontabfile
Перейдем к редактированию списка задач, командой crontab -e. Если вы редактируете список задачи впервые, то программа попросит выбрать из списка редактор, который бы вы хотели использовать для редактирования списка задач. Если не первый раз, то откроет редактор, который был выбран при первом запуске (обычно vi или nano).
Каждая строка планировщика имеет следующий формат:
* * * * * выполняемая_команда
^ ^ ^ ^ ^
| | | | |
| | | | +---- День недели (0 - 7) (0 или 7 -- это Воскресенье)
| | | +------ Месяц (1 - 12)
| | +-------- День (1 - 31)
| +---------- Час (0 - 23)
+------------ Минута (0 - 59)
Временные параметры можно указывать диапазоном, в слудующем формате: 0-59, или перечисление, разделяя значения запятой: 0,1,2,8.
Примеры задач:
# выводить текст 'hello' в файл test.txt каждый понедельник в 3:30
30 3 * * 1 echo hello >> test.txt
# выполнять каждую минуту обнавление рабочей копии сайта из репозитория
0-59 * * * * cd /var/www/mysite; svn update
четверг, 13 октября 2011 г.
Определение кодировки текста в PHP
Функции имеющиеся по умолчанию в PHP не всегда верно определяют кодировку текста, (только в 70% случает). Но существуют сторонние библиотеки которые решают эту задачу на много лучше:
charset_x_win -- библиотека, для преобразования строк на русском языке из неизвестной кодировки в кодировку windows-1251. Оптимизирована для работы с короткими строками. Скачать библиотеку можно тут http://popoff.donetsk.ua/text/work/libs/a/charset/.
Интересные статьи по методам определения кодировки:
http://ivr.webzone.ru/articles/alt_win/index.htm
http://ivr.webzone.ru/articles/defcod_2/index.htm
charset_x_win -- библиотека, для преобразования строк на русском языке из неизвестной кодировки в кодировку windows-1251. Оптимизирована для работы с короткими строками. Скачать библиотеку можно тут http://popoff.donetsk.ua/text/work/libs/a/charset/.
Интересные статьи по методам определения кодировки:
http://ivr.webzone.ru/articles/alt_win/index.htm
http://ivr.webzone.ru/articles/defcod_2/index.htm
Виртуальная машина на JavaScript
Прочитал в Хакере (153 выпуск) о существовании виртуальной машина написанной на JavaScript. Запущенный в браузере Linux можно увидеть на сайте разработчика http://bellard.org/jslinux/.
среда, 5 октября 2011 г.
Настройка mod_rewrite
mod_rewrite -- это модуль сервера Apache, для преобразования URL на лету. Модуль включен в Apache по умолчанию, поэтому никаких дополнительных действий по его подключению не нужно. Активировать и настроить преобразования можно как в файле конфигурации httpd.conf, так и в файле .htaccess*) конкретной директории.
Простейший пример настройки модуля mod_rewrite:
RewriteEngine on
RewriteRule ^(.*)\.aaa$ $1.php [L]
RewriteRule ^(.*)\.ddd$ $1.php
В приведенном примере директива в строке 1задействуется модуль mod_rewrite. С нее начинается любая настройка модуля.
В строке 2 задается правило преобразования URL-адреса в виде регулярного выражения. [L] означает что правило не зависит от правила следующего за ним. Этих правил может быть произвольное множество.
Допустимы следующие параметры в квадратных скобках:
RewriteMap MapName MapType:MapSource
Параметр MapType может принимать следующие значения:
${MapName:LookupKey}
${MapName:LookupKey|DefaultValue}
Например:
*) -- если вы хотите использовать для настроек файл .htaccess, то не забудьте поставить в httpd.conf для AllowOverride значение All (по умолчанию None) чтобы настройки из .htaccess приминились сервером.
**) --
Оригинальная документация лежит здесь http://httpd.apache.org/docs/current/mod/mod_rewrite.html
Простейший пример настройки модуля mod_rewrite:
RewriteEngine on
RewriteRule ^(.*)\.aaa$ $1.php [L]
RewriteRule ^(.*)\.ddd$ $1.php
В приведенном примере директива в строке 1задействуется модуль mod_rewrite. С нее начинается любая настройка модуля.
В строке 2 задается правило преобразования URL-адреса в виде регулярного выражения. [L] означает что правило не зависит от правила следующего за ним. Этих правил может быть произвольное множество.
Допустимы следующие параметры в квадратных скобках:
- C – Chain;
- E – Environmental Variable;
- F – Forbidden;
- G – 410 Gone;
- L – Last;
- N – Next (Round);
- NC – No Case;
- NE – No Escape;
- NS – No SubRequest;
- P – Proxy;
- PT – Pass Through;
- QSA – Query String Append;
- R – Redirect;
- S – Skip;
- T – Type.
RewriteMap MapName MapType:MapSource
Параметр MapType может принимать следующие значения:
- int --
- toupper --
- tolower --
- escape --
- unescape --
- txt --
- rnd --
- dbm --
- prg --
${MapName:LookupKey}
${MapName:LookupKey|DefaultValue}
Например:
RewriteRule .* {tolowermap:$0}
*) -- если вы хотите использовать для настроек файл .htaccess, то не забудьте поставить в httpd.conf для AllowOverride значение All (по умолчанию None) чтобы настройки из .htaccess приминились сервером.
**) --
Оригинальная документация лежит здесь http://httpd.apache.org/docs/current/mod/mod_rewrite.html
вторник, 4 октября 2011 г.
Fast Artificial Neural Network Library (FANN)
Библиотека FANN предназначена для создания искусственных нейронных сетей. Существуют реализации более чем на 15 языках программирования.
понедельник, 3 октября 2011 г.
Subversion
Состав пакета Subversion
Созданный репозиторий пост. Для того чтобы теперь создать в нем нужную нам иерархию директорий, воспользуемся утилитой svn. Допустим у нас имеется проект project1. Классическая иерархия включает в себя основную ветвь, хранящуюся в директории trunk, и ветвления хранящиеся в директории brunches. Поэтому создадим следующую иерархия папок:
-->project1
|
+-->trunk
|
+-->branches
Импорт нашей иерархии в репазиторий осуществляется следующим образом:
Документация по Subversion:
http://doc.dvgu.ru/devel/svn/index.html
http://mail.softics.ru/books/svn-book.html
- svnadmin -- утилита для создания, управления и восстановления репозитария Subversion;
- svn -- клиент Subversion;
- svnserve -- программа-сервер, предоставляющая доступ к репозиторию Subversion по протоколу SVN или SSH.
svnadmin create /usr/home/user1/repository
Созданный репозиторий пост. Для того чтобы теперь создать в нем нужную нам иерархию директорий, воспользуемся утилитой svn. Допустим у нас имеется проект project1. Классическая иерархия включает в себя основную ветвь, хранящуюся в директории trunk, и ветвления хранящиеся в директории brunches. Поэтому создадим следующую иерархия папок:
-->project1
|
+-->trunk
|
+-->branches
Импорт нашей иерархии в репазиторий осуществляется следующим образом:
- переходим в директорию содержащую директорию project1;
- выполняем команду:
Документация по Subversion:
http://doc.dvgu.ru/devel/svn/index.html
http://mail.softics.ru/books/svn-book.html
Архивирование данных в Linux
Формат tar используется для создания архива, то есть для хранения нескольких файлов в одном файле. Важно знать, что сам по себе tar не сжимает файлы, а просто создает архив который по размеру схож с общим суммарным размеров упакованных в него файлов.
Gzip (расшифровывается как GNU zip) является утилитой для сжатия файлов. Интересно то, что gzip не может создать архив - утилита только сжимает один файл до меньших размеров.
Bzip2 - это альтернатива gzip, обладавший лучшими показателями сжатия и скорости. В результате мы получим архив с расширением tar.bz2.
Как же создать сжатый архив в linux? Ответ -- использовать и tar и gzip/bzip2 одновременно. Смысл в том, что с начала создается архив с файлами при помощи утилиты tar, а потом этот архив сжимается утилитой gzip/bzip2. В результате всех этих манипуляций мы должны получить файл с расширением tar.gz/bz2.
Допустимые опции:
c -- создать архива;
x -- распаковать архива;
t -- получить список содержимого архива;
r -- добавить файлы в конец архива (нельзя делать в сжатых архивах);
j -- тип архива bz2;
z -- тип архива gz;
tar -czf archivefile.tar.gz /home/user1/file.txt
Распаковать сжатый архив archivefile.tar.gz в директорию /home/user1/:
tar -xzf archivefile.tar.gz /home/user1/
Просмотреть содержимое архива archivefile.tar.gz:
tar -tzf archivefile.tar.gz
Gzip (расшифровывается как GNU zip) является утилитой для сжатия файлов. Интересно то, что gzip не может создать архив - утилита только сжимает один файл до меньших размеров.
Bzip2 - это альтернатива gzip, обладавший лучшими показателями сжатия и скорости. В результате мы получим архив с расширением tar.bz2.
Как же создать сжатый архив в linux? Ответ -- использовать и tar и gzip/bzip2 одновременно. Смысл в том, что с начала создается архив с файлами при помощи утилиты tar, а потом этот архив сжимается утилитой gzip/bzip2. В результате всех этих манипуляций мы должны получить файл с расширением tar.gz/bz2.
Утилита tar
tar опцииf имя_архива имена_файлов_и_каталоговДопустимые опции:
c -- создать архива;
x -- распаковать архива;
t -- получить список содержимого архива;
r -- добавить файлы в конец архива (нельзя делать в сжатых архивах);
j -- тип архива bz2;
z -- тип архива gz;
Примеры:
За архивировать файл /home/user1/file.txt в сжатый архив archivefile.tar.gz:tar -czf archivefile.tar.gz /home/user1/file.txt
Распаковать сжатый архив archivefile.tar.gz в директорию /home/user1/:
tar -xzf archivefile.tar.gz /home/user1/
Просмотреть содержимое архива archivefile.tar.gz:
tar -tzf archivefile.tar.gz
суббота, 6 августа 2011 г.
Форматирование даты и времени на C#
В C# для работы с датами и временем используется тип DateTime. Существует еще тип DateTimeOffset. Для преобразования даты/времени в строку у типа DateTime есть 4 переопределения метода ToString:
ToString(string format, IFormatProvider provider); ToString(IFormatProvider provider); ToString(string format); ToString(),где format -- строка форматирования даты/времени. Строка format может состоять из 1 символа, тогда она считается стандартным форматом даты времени, или из нескольких, тогда она считается строкой настраиваемого формата даты и времени.
Существуют следующие стандартные форматы даты и времени:
d -- Короткий шаблон даты.
D -- Полный шаблон даты.
f -- Полный шаблон даты и времени (короткий шаблон времени).
F -- Полный шаблон даты и времени (полный шаблон времени).
g -- Общий шаблон даты и времени (короткий шаблон времени).
G -- Общий шаблон даты и времени (полный шаблон времени).
M, m -- Шаблон дней месяца.
O, o -- Шаблон обратного преобразования даты и времени.
R, r -- Шаблон RFC1123.
s -- Сортируемый шаблон времени и даты.
t -- Короткий шаблон времени.
T -- Полный шаблон времени.
u -- Универсальный сортируемый шаблон времени и даты.
U -- Универсальный полный шаблон даты и времени.
Y, y -- Шаблон месяца года.
Для того чтобы получить нестандартную строку времени, например в таком виде 07:27:15, параметр format должен быть строкой настраиваемого формата даты и времени, и иметь значение "hh:mm:ss". В параметре format допустимы следующие спецификаторы:D -- Полный шаблон даты.
f -- Полный шаблон даты и времени (короткий шаблон времени).
F -- Полный шаблон даты и времени (полный шаблон времени).
g -- Общий шаблон даты и времени (короткий шаблон времени).
G -- Общий шаблон даты и времени (полный шаблон времени).
M, m -- Шаблон дней месяца.
O, o -- Шаблон обратного преобразования даты и времени.
R, r -- Шаблон RFC1123.
s -- Сортируемый шаблон времени и даты.
t -- Короткий шаблон времени.
T -- Полный шаблон времени.
u -- Универсальный сортируемый шаблон времени и даты.
U -- Универсальный полный шаблон даты и времени.
Y, y -- Шаблон месяца года.
d -- день месяца от 1 до 31;
dd -- день месяца от 01 до 31;
ddd -- день недели, сокращенно (Пн, Вт и т. д.);
dddd -- день недели, полностью (понедельник и т. д.);
h -- часы от 1 до 12;
hh -- часы от 01 до 12;
H -- часы от 0 до 23;
HH -- часы от 00 до 23;
m -- минуты от 0 до 59;
mm -- минуты от 00 до 59;
M -- месяц от 1 до 12;
MM -- месяц от 01 до 12;
MMM -- месяц, сокращенно;
MMMM -- месяц, полностью;
s -- секунды от 0 до 59;
ss -- секунды от 00 до 59;
y -- год от 0 до 99;
yy -- год от 00 до 99;
yyy -- год от 000 до 999;
yyyy -- год от 0000 до 9999;
yyyyy -- год от 00000 до 99999;
t -- первый символ от AM/PM;
tt -- AM/PM;
z -- смещение в часах от UTC (всемирного координатного времени, приближенно совпадает со временем по Гринвичу);
zz -- смещение в часах от UTC,с нулями в начале для значений из одной цифры;
zzz -- смещение в часах и минутах от UTC, например 6/15/2009 1:45:30 PM -07:00 -> -07:00;
g или gg -- эпоха или эра;
f, ff, fff, ffff, fffff, ffffff, fffffff -- доли секунды;
F, FF, FFF, FFFF, FFFFF, FFFFFF, FFFFFFF -- доли секунды с нулями в начале;
: -- разделитель компонентов времени;
/ -- разделитель компонентов даты;
"string" или 'string' -- любая строка, копируется в результат как есть;
% -- отделяет символ спецификатора, от символа стоящего перед ним. Например "dd" для 8 марта возвратит "08", а "d%d" возвратит 88;
\ -- escape-символ, отменяет действие спецификатора;
др. символы -- копируется в результирующую строку без изменений.
provider -- обычно задается объектом класса CultureInfo - представляет язык и региональные параметры. Если provider не задан или равен null, то за него принимается CultureInfo.CurrentCulture.dd -- день месяца от 01 до 31;
ddd -- день недели, сокращенно (Пн, Вт и т. д.);
dddd -- день недели, полностью (понедельник и т. д.);
h -- часы от 1 до 12;
hh -- часы от 01 до 12;
H -- часы от 0 до 23;
HH -- часы от 00 до 23;
m -- минуты от 0 до 59;
mm -- минуты от 00 до 59;
M -- месяц от 1 до 12;
MM -- месяц от 01 до 12;
MMM -- месяц, сокращенно;
MMMM -- месяц, полностью;
s -- секунды от 0 до 59;
ss -- секунды от 00 до 59;
y -- год от 0 до 99;
yy -- год от 00 до 99;
yyy -- год от 000 до 999;
yyyy -- год от 0000 до 9999;
yyyyy -- год от 00000 до 99999;
t -- первый символ от AM/PM;
tt -- AM/PM;
z -- смещение в часах от UTC (всемирного координатного времени, приближенно совпадает со временем по Гринвичу);
zz -- смещение в часах от UTC,с нулями в начале для значений из одной цифры;
zzz -- смещение в часах и минутах от UTC, например 6/15/2009 1:45:30 PM -07:00 -> -07:00;
g или gg -- эпоха или эра;
f, ff, fff, ffff, fffff, ffffff, fffffff -- доли секунды;
F, FF, FFF, FFFF, FFFFF, FFFFFF, FFFFFFF -- доли секунды с нулями в начале;
: -- разделитель компонентов времени;
/ -- разделитель компонентов даты;
"string" или 'string' -- любая строка, копируется в результат как есть;
% -- отделяет символ спецификатора, от символа стоящего перед ним. Например "dd" для 8 марта возвратит "08", а "d%d" возвратит 88;
\ -- escape-символ, отменяет действие спецификатора;
др. символы -- копируется в результирующую строку без изменений.
Для форматирования дат и времени также может быть использован метод string.Format(string format, params object args).
* Про форматирование даты и времени в C# можно еще почитать в MSDN.
Настройка кодировки сервера MySQL
По умолчанию в Ubuntu, MySQL устанавливается с кодировкой latin1. Это можно посмотреть командой:
В результате получим такой вывод:
После чего перезагрузить сервер MySQL командой restart mysql.
После этого (или до этого не важно) для того чтобы уже существующую базу данных преобразовать к UTF-8, нужно вызвать команду:
* Чтобы подключиться к серверу MySQL, например под пользователем root, с паролем 12345, к базе db1, нужно вызвать команду:
mysql --user=root --password=12345 --database=db1
mysql> SHOW VARIABLES LIKE 'char%';
В результате получим такой вывод:
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)Чтобы сервер загружался с кодировкой utf-8, нужно в конфигурационный файл /etc/mysql/my.cnf в секцию [mysqld] добавить следующие строки:
skidp-character-set-client-handshake default-character-set=utf8 init-connect='SET NAMES utf8' character-set-server=utf8 #может и не нужна, но я прописывал
После чего перезагрузить сервер MySQL командой restart mysql.
После этого (или до этого не важно) для того чтобы уже существующую базу данных преобразовать к UTF-8, нужно вызвать команду:
mysql> ALTER DATABASE <db_name> CHARACTER SET utf8;
* Чтобы подключиться к серверу MySQL, например под пользователем root, с паролем 12345, к базе db1, нужно вызвать команду:
mysql --user=root --password=12345 --database=db1
пятница, 5 августа 2011 г.
Сериализация на C#
Сериализацию (и десериализацию) объекта в .NET можно осуществить двумя способами. Один более универсальный, другой более удобный.
Сначала рассмотрим более удобный способ. С помощью него объект можно сериализовать только в XML.
Первое что нужно для этого сделать -- добавить в References ссылки на System.Xml.dll и (только в Silverlight приложениях) System.Xml.Serialization.dll. В первой, в неймспейсе System.Xml.Serialization содержатся атрибуты, необходимые для указания какому элементу XML соответствует какой-либо класс или свойство:
Пример разметки классов для сериализации приведен в листинге:
Для этого в неймспейсе System.Xml.Serialization существует класс XmlSerializer. Его конструктор принимает в качестве параметра тип класса, который соответствует корневому элементу XML.
Класс содержит 3 нужные нам метода:
CanDeserialize(XmlReader xmlReader) -- проверяет, получится ли получить из переданного в параметре XML, указанный при инстанцировании тип.
Deserialize(XmlReader xmlReader) -- возвращает объект, полученный в результате десериализачии XML считанного из xmlReader.
Serialize(XmlWriter xmlWriter, object o) -- сериализует объект o и записывает полученный XML в xmlWriter.
Пример получения из XML объекта описанного выше класса, приведен в листинге ниже:
Сначала рассмотрим более удобный способ. С помощью него объект можно сериализовать только в XML.
Первое что нужно для этого сделать -- добавить в References ссылки на System.Xml.dll и (только в Silverlight приложениях) System.Xml.Serialization.dll. В первой, в неймспейсе System.Xml.Serialization содержатся атрибуты, необходимые для указания какому элементу XML соответствует какой-либо класс или свойство:
- XmlRootAttribute -- указывает на то, что класс к которому он (атрибут) применен, является корнем XML-файла. Он может принимать аргумент ElementName, который задает как будет называться соответствующий тег в XML'е. Если ElementName не задан, то за название тега принимается имя класса, к которому был применен атрибут.
- XmlAttributeAttribute -- указывает сериализатору на то, что свойство к которому применен атрибут, является атрибутом XML. В качестве аргумента может принимать название атрибута в XML.
- XmlElementAttribute -- указывает сериализатору на то, что свойство к которому применен атрибут, является элементом XML. Также как и предыдущий может принимать имя в XML в качестве аргумента.
- XmlArrayAttribute -- применяется к свойству, имеющему перечислимый тип (массив), в случае если необходимо чтобы входящие в соответствующий ему элементы XML дочерние элементы, были представлены как элементы массива этого свойства.
- XmlArrayItemAttribute -- также применяется к свойству, имеющему перечислимый тип, вместе с атрибутом XmlArrayAttribute, чтобы указать параметры соответствующего элементу массива, элемента XML (например тип или имя).
Пример разметки классов для сериализации приведен в листинге:
using System; using System.Xml.Serialization; using System.IO; namespace SerializationTest1 { public class Product { private string name; private int price; [XmlElement("price")] public int Price { get { return price; } set { price = value; } } [XmlAttribute("name")] public string Name { get { return name; } set { name = value; } } } [XmlRoot("shop")] public class Shop { private string owner; private string name; private Product[] products; [XmlAttribute("name")] public string Name { get { return name; } set { name = value; } } [XmlAttribute("owner")] public string Owner { get { return owner; } set { owner = value; } } [XmlArray("products"), XmlArrayItem("product")] public Product[] Products { get { return products; } set { products = value; } } } }После разметки сериализуемых классов атрибутами (чтобы сериализатор знал что во что сериализировать), переходим непосредственно к самой сериализации.
Для этого в неймспейсе System.Xml.Serialization существует класс XmlSerializer. Его конструктор принимает в качестве параметра тип класса, который соответствует корневому элементу XML.
Класс содержит 3 нужные нам метода:
CanDeserialize(XmlReader xmlReader) -- проверяет, получится ли получить из переданного в параметре XML, указанный при инстанцировании тип.
Deserialize(XmlReader xmlReader) -- возвращает объект, полученный в результате десериализачии XML считанного из xmlReader.
Serialize(XmlWriter xmlWriter, object o) -- сериализует объект o и записывает полученный XML в xmlWriter.
Пример получения из XML объекта описанного выше класса, приведен в листинге ниже:
using System; using System.Xml.Serialization; using System.IO; namespace SerializationTest1 { class Program { static void Main(string[] args) { string xml = @"<shop name=""Supershop"" owner=""Fedya Pupkin""> <products> <product name=""phone""> <price>10000</price> </product> <product name=""book""> <price>500</price> </product> </products> </shop>"; XmlSerializer serializer = new XmlSerializer(typeof(Shop)); object obj = serializer.Deserialize( new StringReader(xml)); Shop shop = (Shop)obj; } } }
Подписаться на:
Сообщения (Atom)