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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сериализация нескольких коллекций в файл, ошибка при десериализации 
V
    Опции темы
dAlex
Дата 15.6.2011, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нужно сериализовать несколько коллекций

Код

[Serializable]
    public class ChartItem : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }     
        
        private double _Item;
        private DateTime _Time;

        public double Item
        {
            get { return _Item; }
            set
            {
                _Item = value;
                OnPropertyChanged("Item");
            }
        }
        public DateTime Time
        {
            get { return _Time; }
            set
            {
                _Time = value;
                OnPropertyChanged("Time");
            }
        }
        public ChartItem()
        {                 
            Time = MainWindow.Instance.Trader.Trader.MarketTime;
        }     
        public ChartItem(double _item, DateTime _time)
        {
            Item = _item;
            Time = _time;
        }
    }

Код

XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<ChartItem>));
using (StreamWriter stream = new StreamWriter("D:\\appgdata.xml"))
{
        serializer.Serialize(stream, rgo);
        serializer.Serialize(stream, rdgo);
        serializer.Serialize(stream, rs);
        serializer.Serialize(stream, rp);
        serializer.Serialize(stream, cc);
}   

Получается вот такой файл
Код

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfChartItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
  <ChartItem>
    <Item>53190</Item>
    <Time>2011-06-15T10:20:13.40625+04:00</Time>
  </ChartItem>
  <ChartItem>
    <Item>106380</Item>
    <Time>2011-06-15T10:20:39.4375+04:00</Time>
  </ChartItem>
  ...
</ArrayOfChartItem><?xml version="1.0" encoding="utf-8"?>
<ArrayOfChartItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
  <ChartItem>
    <Item>342</Item>
    <Time>2011-06-15T10:20:39.4375+04:00</Time>
  </ChartItem>
  <ChartItem>
    <Item>1083</Item>
    <Time>2011-06-15T10:20:40.4375+04:00</Time>
  </ChartItem>
  ...
</ArrayOfChartItem><?xml version="1.0" encoding="utf-8"?>
<ArrayOfChartItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  <ChartItem>
    <Item>57</Item>
    <Time>2011-06-15T10:20:40.4375+04:00</Time>
  </ChartItem>
  <ChartItem>
    <Item>114</Item>
    <Time>2011-06-15T10:20:44.421875+04:00</Time>
  </ChartItem>
  ...
</ArrayOfChartItem><?xml version="1.0" encoding="utf-8"?>
<ArrayOfChartItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ChartItem>
    <Item>0</Item>
    <Time>2011-06-15T10:19:57.53125+04:00</Time>
  </ChartItem>
  <ChartItem>
    <Item>342</Item>
    <Time>2011-06-15T10:20:13.40625+04:00</Time>
  </ChartItem>
  ...
</ArrayOfChartItem><?xml version="1.0" encoding="utf-8"?>
<ArrayOfChartItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ChartItem>
    <Item>94.65</Item>
    <Time>2011-06-15T10:19:56.015625+04:00</Time>
  </ChartItem>
  <ChartItem>
    <Item>94.67</Item>
    <Time>2011-06-15T10:19:56.53125+04:00</Time>
  </ChartItem>
   ....
</ArrayOfChartItem>

При десериализации
Код

XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<ChartItem>));
using (StreamReader stream = new StreamReader("D:\\appgdata.xml"))
{                
    rgo = (ObservableCollection<ChartItem>)serializer.Deserialize(stream);
    rdgo = (ObservableCollection<ChartItem>)serializer.Deserialize(stream);
    rs = (ObservableCollection<ChartItem>)serializer.Deserialize(stream);
    rp = (ObservableCollection<ChartItem>)serializer.Deserialize(stream);
    cc = (ObservableCollection<ChartItem>)serializer.Deserialize(stream); 
}


в первой же строчке rgo = (ObservableCollection<ChartItem>)serializer.Deserialize(stream) вылетает ексепшн - что-то там ему не нравится в xml-документе. 
конкретнее:
Цитата

Message=Unexpected XML declaration. The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it. Line 11, position 22.

там находится знак вопроса, <?xml version="1.0" encoding="utf-8"?>
Можно ли вообще несколько однотипных коллекций сериализовать в один файл или там какие-то нюансы?

Это сообщение отредактировал(а) dAlex - 15.6.2011, 11:07
--------------------
eof()
PM WWW ICQ GTalk Jabber   Вверх
dAlex
Дата 15.6.2011, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ага, нашла, что должен быть только один root-элемент в xml, и тогда строчка
Код

<?xml version="1.0"?>

будет только одна. И что тогда делать, пихать их вместе в какой-то класс, только для сериализации?

upd: убрала в другой сериализуемый класс, все работает.

Это сообщение отредактировал(а) dAlex - 15.6.2011, 13:44
--------------------
eof()
PM WWW ICQ GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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