Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка десериализация списка / 4 сообщений из 4, страница 1 из 1
05.09.2013, 11:43
    #38387619
FullKettle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка десериализация списка
Есть два класса:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    [Serializable()]
    [System.Xml.Serialization.XmlRoot("ShemaContainer")]
    public class Shema
    {
        [XmlAttribute("Id")]
        public int Id { get; set; }
        [XmlAttribute("Name")]
        public String Name { get; set; }
    }



Код: c#
1.
2.
3.
4.
5.
    public class ShemaContainer
    {
        [XmlArray("Data"), XmlArrayItem("Item")]
        public List<Shema> shemaList { get; set; }
    }



Создаю экземпляр контейнера, сериализую. А обратно десериализовать не получается. Структура хмл валидна. Ошибка
There is an error in XML document (0, 0).
Десериализатор (один из вариантов исполнения)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        public static T Deserialize<T>(string path)
        {
            if (string.IsNullOrEmpty(path)) return default(T);

            TextReader reader = File.OpenText(path);
            //StreamReader reader = new StreamReader(path);
            reader.ReadToEnd();
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
            return (T)serializer.Deserialize(reader);
        }


Вызов
Код: c#
1.
2.
ShemaContainer shemaList = new ShemaContainer();
shemaList= Deserialize<ShemaContainer>(filename);



Перебрал кучу вариаций, беда.
...
Рейтинг: 0 / 0
05.09.2013, 11:51
    #38387629
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка десериализация списка
Всё работает

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
string xml = "";
            
using (var writer = new StringWriter(new StringBuilder()))
{
    var container = new ShemaContainer();
    container.shemaList = Enumerable.Range(1, 5).Select(d => new Shema { Id = d, Name = "Name " + d }).ToList();

    new XmlSerializer(typeof(ShemaContainer)).Serialize(writer, container);
    xml = writer.GetStringBuilder().ToString();
}
            
using (var reader = new StringReader(xml))
{
    var container = new XmlSerializer(typeof(ShemaContainer)).Deserialize(reader) as ShemaContainer;
}
...
Рейтинг: 0 / 0
05.09.2013, 11:52
    #38387634
SerP1983
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка десериализация списка
ReadToEnd() зачем?
...
Рейтинг: 0 / 0
05.09.2013, 12:00
    #38387652
FullKettle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка десериализация списка
SerP1983ReadToEnd() зачем?
Черт, осталось от прошлой реализации ))) Без него всё работает )))
Спасибо
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка десериализация списка / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]