powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Десериализация - "отсутствует метка порядка байт в Юникоде"
2 сообщений из 2, страница 1 из 1
Десериализация - "отсутствует метка порядка байт в Юникоде"
    #38351999
Fet Frumos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть сложный класс (включает другие классы). Сериализирую его, записываю в файл. Когда пытаюсь десериализировать из файла вылетает ошибка

Код: c#
1.
2.
3.
Message=В документе XML (0, 0) присутствует ошибка.
.......
Message=Отсутствует метка порядка байт в Юникоде. Переход в Юникод невозможен.



Если в заголовке файле руками удаляю атрибут encoding десериализация работает. Вот мой код сериализации, кодировки пробовал разные
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
            var serializer = new XmlSerializer(typeof(MyType));
            StringWriter  sWriter = new StringWriter();
            XmlWriterSettings xSet = new XmlWriterSettings();
            xSet.Indent = true;
            xSet.IndentChars = "  ";
            xSet.Encoding = Encoding.UTF8;
            xSet.NewLineOnAttributes = false;

            XmlWriter xWriter = XmlWriter.Create(sWriter, xSet);

            serializer.Serialize(xWriter, data);
            File.WriteAllText(path, sWriter.ToString(),Encoding.UTF8);



код десериализации
Код: c#
1.
2.
3.
            var serializer = new XmlSerializer(typeof(MyType));
            XmlTextReader reader = new XmlTextReader(path);
            var data = (MyType)serializer.Deserialize(reader);



Подскажите как решить эту проблему?
...
Рейтинг: 0 / 0
Десериализация - "отсутствует метка порядка байт в Юникоде"
    #38352018
Noriffik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fet Frumos,
Сериализация:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public static void Save(string file, Settings c)
        {
            try
            {
                if (File.Exists(file))
                    File.Delete(file);

                var xs
                   = new XmlSerializer(c.GetType());
                var writer = File.CreateText(file);
                xs.Serialize(writer, c);
                writer.Flush();
                writer.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


Десериализация:
Код: 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.
public static UserSettings Load(string file)
        {
            if (!File.Exists(file))
            {
                var cfg = new Settings();
                Save(file, cfg);

                return cfg;
            }

            // TODO: MAke this binary
            var xs = new XmlSerializer(
                  typeof(Settings));
            var reader = File.OpenText(file);
            var c = new AccountSettings();
            try
            {
                c = (Settings)xs.Deserialize(reader);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
            reader.Close();
            return c;
        }



Как-то так
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Десериализация - "отсутствует метка порядка байт в Юникоде"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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