Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xml dom можно маленький пример? 
V
    Опции темы
gambit
Дата 22.7.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Имеется List, в нем набор потомков одного класса. Надо все их записать в xml с помощью xml dom.
Покажите пож. маленький пример записи и чтения. А то что в инете и msdn куча маленьких отрывков, а полной картины что то собрать не удается.
PM MAIL ICQ Skype   Вверх
mihryak
Дата 22.7.2010, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Код

    [XmlInclude(typeof(BClass))]
    [XmlInclude(typeof(CClass))]
    public class AClass
    {
        public AClass()
        {
            A = "A";
        }

        public string A { get; set; }

        public override string ToString()
        {
            return A;
        }
    }

    public class BClass : AClass
    {
        public BClass()
        {
            B = "B";
        }

        public string B { get; set; }

        public override string ToString()
        {
            return A + B;
        }
    }

    public class CClass : AClass
    {
        public CClass()
        {
            C = "C";
        }

        public string C { get; set; }

        public override string ToString()
        {
            return A + C;
        }
    } 


    class Program
    {
        static void Main(string[] args)
        {
            List<AClass> list = new List<AClass>
                                    {
                                        new AClass {A = "newA"},
                                        new BClass {B = "newB"},
                                        new CClass {C = "newC"}
                                    };
            XmlSerializer serializer = new XmlSerializer(typeof(List<AClass>));
            using (MemoryStream stream = new MemoryStream())
            {
                serializer.Serialize(stream, list);
                stream.Position = 0;
                list = (List<AClass>) serializer.Deserialize(stream);
                list.ForEach(Console.WriteLine);
            }

            Console.ReadKey();
        }
    }

PM MAIL ICQ   Вверх
gambit
Дата 22.7.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Не мне надо не серриализация, а:
Код

XmlDocument doc = new XmlDocument();
            XmlDeclaration xmldecl;
            xmldecl = doc.CreateXmlDeclaration("1.0", null, null);
            xmldecl.Encoding = "UTF-8";
            xmldecl.Standalone = "no";
            XmlElement root = doc.DocumentElement;
            doc.InsertBefore(xmldecl, root);

            XmlProcessingInstruction newPI = doc.CreateProcessingInstruction("variant", "1");
            doc.AppendChild(newPI);

            XmlElement node = doc.CreateElement(ConstString.VectEdit);

            XmlElement nodeS = doc.CreateElement(ConstString.Shape);
            node.AppendChild(nodeS);

            foreach (var item in CDS.ListShapes)
            {
                item.AddShapeXMLDOM(doc, nodeS);
            }

            doc.AppendChild(node);

            doc.Save("1.xml");

Это я с записью разобрался, осталось чтение
PM MAIL ICQ Skype   Вверх
mihryak
Дата 22.7.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(gambit @  22.7.2010,  14:08 Найти цитируемый пост)
item.AddShapeXMLDOM(doc, nodeS);

самое важное ты скрыл, что там происходит?
в любом случае, понадобится записывать идентификатор типа - без него ты экземпляр не создашь
если знаешь тип, экземпляр можно создать через Activator.CreateInstance, либо, если типов мало и не нужна особая гибкость, через простой  case.
свойства вытаскиваются из типов через рефлекшн
как-то так
но зачем ещё один велосипед? если базовая сериализация не устраивает, всегда можно сделать кастомную ()

Добавлено через 57 секунд
см. IXmlSerializable и сериализационные атрибуты
PM MAIL ICQ   Вверх
gambit
Дата 22.7.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Цитата(mihryak @  22.7.2010,  13:57 Найти цитируемый пост)
самое важное ты скрыл, что там происходит?

Вообще то вопрос состоял в том, что я просил показать что же там должно скрываться.

Цитата(mihryak @  22.7.2010,  13:57 Найти цитируемый пост)
но зачем ещё один велосипед? если базовая сериализация не устраивает, всегда можно сделать кастомную 

Таково задание.

В принципе задача решена, вопрос снят. И запись, и чтение проходят успешно.

PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.