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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> падает десериализация DataContractSerializer 
V
    Опции темы
gambit
Дата 21.3.2011, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Добрый день
имеется класс
Код

    [DataContract]
    public class UserObject
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public TypeObjectUser type { get; set; }
        [IgnoreDataMember]
        public Uri Image
        {
            get
            {
                switch (this.type)
                {
                     //здесь реализация
                }
                return null;
            }
        }
        [DataMember]
        public ObservableCollection<UserObject> Children { get; set; }
    }

    [DataContract]
    public class StructUsers
    {
        [DataMember]
        public ObservableCollection<UserObject> Children { get; set; }
    }


Его надо глубоко клонировать. Решил пойти по пути наименьшего сопротивления, и сериализовать/распоковать его. Расширил класс:

Код

        internal StructUsers Clone()
        {
            DataContractSerializer ser = new DataContractSerializer(typeof(StructUsers), new Type[] { typeof(ObservableCollection<UserObject>), typeof(UserObject) });
            MemoryStream ms = new MemoryStream();
            ser.WriteObject(ms, this);
            return (StructUsers)ser.ReadObject(ms);
        }


но на этапе распаковки все это счастье падает:
{System.Runtime.Serialization.SerializationException: Ошибка десериализации объекта типа UI.Controls.StructUsers. Отсутствует корневой элемент.

Хотя если посмотреть получающийся xml, то в нем вроде усе есть (в аттаче(это xml, но форуму этот формат не понравился)).

Что он хочет от меня??

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  qwe.txt 2,81 Kb
PM MAIL ICQ Skype   Вверх
gambit
Дата 21.3.2011, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Вопрос решен. Я в очередной раз забыл выставить позицию в потоке:
Код

 DataContractSerializer ser = new DataContractSerializer(typeof(StructUsers), new Type[] { typeof(ObservableCollection<UserObject>), typeof(UserObject) });
            MemoryStream ms = new MemoryStream();
            ser.WriteObject(ms, this);
            ms.Position = 0; // вот этого не хватало
            return (StructUsers)ser.ReadObject(ms);

PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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