0 / 0 / 1
Регистрация: 27.12.2014
Сообщений: 289
1

Deserialize - ошибка. в документе XML присутствует ошибка - странный глюк

29.04.2017, 08:37. Показов 4153. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Происходит ошибка в следующей функции:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
private void LoadSettingsFromFile()
        {
 
            string folderToSaveSettings = Environment.CurrentDirectory;
            string folderToSaveSettingsApple = Environment.CurrentDirectory + "\\ProgramAppleKubstu";
 
 
 
            folderToSaveSettings = folderToSaveSettingsApple;
            folderToSaveSettingsApple = folderToSaveSettings + "\\Apple";
 
            FileStream fs = null;
            try
            {
                XmlSerializer formatter = new XmlSerializer(typeof(strucSettings));
                fs = new FileStream(folderToSaveSettingsApple + "\\settings.xml", FileMode.Open);
                strucSettings settingsStr = (strucSettings)formatter.Deserialize(fs);
 
 
 
 
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            try
            {
                fs.Close();
            }
            catch
            {
            }      
 
        }
Текст ошибки:
"В документе XML (10, 17) присутствует ошибка."
Вот описание структуры:
C#
1
2
3
4
5
6
7
8
9
10
public struct strucSettings
        {
            public string _strFolderWorkName;
            public string _strDBFolderName;
            public double _dMinObjectSize;
            public bool _bUsePredobrabotka;
            public double _dAlphaPirson;
            public int _iWhatToDoWithFuzzyCluster;
            public int iPointsInGroup;
        }
Вот описание этого проблемного xml файла:
XML
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
<strucSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <_strFolderWorkName>D:/!MyProgramApple/</_strFolderWorkName>
  <_strDBFolderName>D:/!MyProgramApple/teachDB/</_strDBFolderName>
  <_dMinObjectSize>450</_dMinObjectSize>
  <_bUsePredobrabotka>true</_bUsePredobrabotka>
  <_dAlphaPirson>16037.1566750138</_dAlphaPirson>
  <_iWhatToDoWithFuzzyCluster>0</_iWhatToDoWithFuzzyCluster>
  <iPointsInGroup>5</iPointsInGroup>
</strucSettings>
Самое непонятное заключается в том, что если будет такое значение <iPointsInGroup>10</iPointsInGroup>, то всё загрузится
Почему загрузка зависит от того, больше 10 или меньше 10 значение в структуре? что за глюк?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2017, 08:37
Ответы с готовыми решениями:

Выскакивает ошибка: В документе XML (1, 2) присутствует ошибка
Возникает ошибка здесь: object obj = mySerializer.Deserialize(ms); class Program { static...

В документе XML (2, 2) присутствует ошибка
Пытаюсь десериализовать, но здесь: profiles =...

Десериализация c#, в документе XML (13, 11) присутствует ошибка
В общем, пытаюсь реализовать механизм сериализации и десериализации. Сериализация успешно...

Visual studio 2013 в документе xml (8,2) присутствует ошибка
Добрый день. не могу понять что за ошибка происходит. создавал уже чистые тестовые проекты. при...

3
Эксперт .NETАвтор FAQ
10377 / 5108 / 1824
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
29.04.2017, 12:18 2
Лучший ответ Сообщение было отмечено Dimarik__1 как решение

Решение

Dimarik__1, У меня ваш файл десериализуется нормально (с любым значением iPointsInGroup).
Цитата Сообщение от Dimarik__1 Посмотреть сообщение
Самое непонятное заключается в том, что если будет такое значение <iPointsInGroup>10</iPointsInGroup>, то всё загрузится
Почему загрузка зависит от того, больше 10 или меньше 10 значение в структуре? что за глюк?
Подозреваю, что у вас неправильно открывается файловый поток при сохранении файла. Возможно, вы сохраняете в режиме FileMode.Open, а нужно в режиме FileMode.Create.


PS И кстати, используйте using(var fs = new FileStream(..)) вместо всех этих бесконечных try/catch
1
0 / 0 / 1
Регистрация: 27.12.2014
Сообщений: 289
29.04.2017, 19:37  [ТС] 3
Да. Вы были правы. Было FileStream fs = new FileStream(folderToSaveSettingsApple + "\\settings.xml", FileMode.OpenOrCreate); поменял на Create и всё заработало. Спасибо. А почему так? можете пояснить?
0
Эксперт .NETАвтор FAQ
10377 / 5108 / 1824
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
29.04.2017, 20:54 4
Цитата Сообщение от Dimarik__1 Посмотреть сообщение
А почему так? можете пояснить?
Если файл существует, то режим Create - очищает файл. А режим Open - нет. Если вы открыли через Open и начинаете писать в него, то оно пишется поверх того текста который там был. И если старый текст был длинее того, что вы туда записали, то в конце файла будет торчать кусок старого текста. Что в вашем случае и происходит.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2017, 20:54
Помогаю со студенческими работами здесь

Присутствует ли ошибка?
Собственно задание такого: написать подпрограмму для выборки из некоторого саммива двойных слов без...

MPI. Ошибка в выводимых данных. (Код присутствует)
Доброе время суток. Программа должна пересылать данные от 3 процесса к 0, и от 0 к 3. Необхожимо...

Ошибка разбора XML/ Ошибка при вызове метода контекста (Прочитать)
1C 8.2 Документооборот КОРП 1.2 Текст ошибки...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Всем привет! Помогите, плиз, разобраться с ошибкой: An unhandled exception of type...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru