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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с сериализацией, Возникла ошибка при отражении типа  
V
    Опции темы
Чердак
  Дата 10.4.2009, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Необходимо сохранить свойства объекта в xml файл. Вот класс моего объекта:
Код

 [Serializable]
    public class PlanData
    {

        public PlanData()
        {
           
            Documents = new ObservableCollection<Document>();
            Tools = new ObservableCollection<Tool>();
           
        }

        public string PrichinaMej
        {
            get;
            set;
        }

        public string Object
        {
            get;
            set;
        }
      
        public ObservableCollection<Document> Documents
        {
            get;
            set;
        }

       
        public ObservableCollection<Tool> Tools
        {
            get;
            set;
        }
       }
    [Serializable]
    public class Tool
    {
        public Tool()
        {
        }
        public string Name
        {
            get;
            set;
        }
        public string Certificate
        {
            get;
            set;
        }
        public string Svidetelstvo
        {
            get;
            set;
        }
    }

 [Serializable]
    public class Document
    {
         public Document()
         {
         }
        public string Name
        {
            get;
            set;
        }
        public string Recviziti
        {
            get;
            set;
        }
    }


В коде сериализую:
Код

  public void SerializableData()
        {
                FileStream fs = new FileStream("FileSave.xml", FileMode.Create);
                System.Xml.Serialization.XmlSerializer x1 = new System.Xml.Serialization.XmlSerializer(typeof(PlanData));
                x1.Serialize(fs, CurDoc);
                fs.Close();
                MessageBox.Show("Объект успешно сериализован в файл c:\\Primer.xml");
            
        }


На строке: 
Код

System.Xml.Serialization.XmlSerializer x1 = new System.Xml.Serialization.XmlSerializer(typeof(PlanData));
 
Выдает ошибку  "Возникла ошибка при отражении типа "
В чем тут дело? Не могу разобраться.

--------------------
PM MAIL   Вверх
altarvic
Дата 10.4.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



[XmlSerializable]

сорри, попутал малость smile

Это сообщение отредактировал(а) altarvic - 10.4.2009, 14:46
PM MAIL   Вверх
Чердак
Дата 10.4.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Error    1    Не удалось найти имя типа или пространства имен 'XmlSerializable' (возможно, пропущена используемая директива или ссылка на сборку)    
что-то не могу найти, какой неймспайс нужен

Добавлено @ 10:59
using System.Xml.Serialization; - добавил, не помогло

Добавлено @ 11:07
Пишу так, ошибка: 
Код

public class AccuracyChPoint : IXmlSerializable


Error    1    'VSoft.GEO.Mejevanie.AccuracyChPoint' не реализует член интерфейса 'System.Xml.Serialization.IXmlSerializable.GetSchema()'    


Это сообщение отредактировал(а) Чердак - 10.4.2009, 11:08
--------------------
PM MAIL   Вверх
Idsa
Дата 10.4.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 14
Всего: 62



altarvic, что за атрибут такой?

Чердак, Xml-сериализация вообще не требует атрибута. Посмотрите, какой InnerException в первом примере.

Добавлено через 2 минуты
А CurDoc - переменная типа PlanData? Судя по ее имени, можно предположить, что это экземпляр типа Document. Если так, то в конструктор XmlSerializer нужно передавать typeof(Document).


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Чердак
Дата 10.4.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

А CurDoc - переменная типа PlanData?

Да, тип PlanData.

InnerException^

{"Возникла ошибка при отражении свойства \"TableOfContents\"."}
{System.Collections.ListDictionaryInternal}
null

Да, я не полностью класс сюда добавил, есть еще одно свойство:
Код

[Serializable]
    public class PlanData
    {

///----------------------
        public TableOfContents TableOfContents
        {
            get;
            set;
        }
///-------------------------

    }

 [Serializable]
    public class TableOfContents 

    {
        public TableOfContents()
        {
        }
        public Dictionary<string, bool> TableOfCont
        {
            get;
            set;
        }

        public string Type
        {
            get;
            set;
        }
       
    }


Это сообщение отредактировал(а) Чердак - 10.4.2009, 12:18
--------------------
PM MAIL   Вверх
Idsa
Дата 10.4.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 14
Всего: 62



Чердак, сделайте тестовое приложение и прикрепите к посту.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Idsa
Дата 10.4.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 14
Всего: 62





--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Чердак
Дата 10.4.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Создал

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Test.rar 41,50 Kb
--------------------
PM MAIL   Вверх
Чердак
Дата 10.4.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



У меня же не класс типа Dictionary, а свойство. 
--------------------
PM MAIL   Вверх
Idsa
Дата 10.4.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 14
Всего: 62



Цитата(Чердак @  10.4.2009,  17:21 Найти цитируемый пост)
У меня же не класс типа Dictionary, а свойство.  

Сериализуются не классы, а их экзмепляры. У Вас свойство типа Dictionary, в котором хранится ссылка на экземпляр.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Чердак
Дата 10.4.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Погуглил... так и не понял, что делать  smile 
--------------------
PM MAIL   Вверх
Partizan
Дата 10.4.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Чердак, вариантов - тьма smile

1. Сделать свою сериализуемую структуру данных аналогичную Dictionary
2. Юзать List<KeyValuePair<string, bool>>
3. Сделать структурку с полями типа string и bool и хранить List таких структурок

Добавлено через 2 минуты и 17 секунд
Чердак
4. поюзать то, что выдаёт гугль по ссылке от Idsa
5. засериализовать бинарной сериализацией и пихнуть это текстом в xml =)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Чердак
Дата 10.4.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Создал класс
Код

 public class DictionaryCollection<TValue> : DictionaryBase, IXmlSerializable
    {
        private XmlSerializer valueSerializer;
        private XmlSerializer keySerializer;

        public DictionaryCollection()
        {
            keySerializer = new XmlSerializer(typeof(String));
            valueSerializer = new XmlSerializer(typeof(TValue));
        }
        public TValue this[string key]
        {
            get { return (TValue)this.Dictionary[key]; }
            set { this.Dictionary[key] = value; }
        }

        public void Add(String key, TValue value)
        {
            this.Dictionary.Add(key, value);
        }
        public void WriteXml(System.Xml.XmlWriter writer)
        {
            foreach (String key in this.Dictionary.Keys)
            {
                keySerializer.Serialize(writer, key);
                valueSerializer.Serialize(writer, this[key]);
            }
        }

        public void ReadXml(System.Xml.XmlReader reader)
        {
            reader.Read();
            while (reader.NodeType != XmlNodeType.EndElement)
            {
                String key = (String)keySerializer.Deserialize(reader);
                TValue value = (TValue)valueSerializer.Deserialize(reader);

                reader.MoveToContent();
                Add(key, value);
            }
        }
    }


а как его юзать хз

и ошибка класса:
Error    1    'VSoft.GEO.Mejevanie.DictionaryCollection<Boolean>' не реализует член интерфейса 'System.Xml.Serialization.IXmlSerializable.GetSchema()'    

Это сообщение отредактировал(а) Чердак - 10.4.2009, 14:50
--------------------
PM MAIL   Вверх
Partizan
Дата 10.4.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Чердак, надо слепо следовать указаниям компилятора и таки реализовать метод GetSchema =)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Чердак
Дата 11.4.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вообще отказался от Dictionary.
--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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