Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
1

Ошибка десериализации

17.05.2018, 13:01. Показов 529. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Есть синглтон-класс Settings, обладающий свойством Lang, при установке значения которого генерируется событие SettingsChanged.
Код класса:
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
36
37
38
39
public class Settings {
 
    public delegate void SettingsHandler(Settings set);
    public event SettingsHandler SettingsChanged;
    private static Settings settings;
    private Settings() {
        
    }
 
    public static Settings getSettings()
    {
        if (settings == null)
            return new Settings();
        else return settings;
    }
 
    private string lang;
    public string Lang
    {
        get { return lang; }
        set
        {
 
            if ((string.Compare(value, "ru-RU", true) == 0) || (string.Compare(value, "en-EN", true) == 0))
            {
                
                lang = value;
               
            }
            else
                lang = "en-EN";
 
           // Thread th = new Thread(()=>SettingsChanged(this));
           // th.Start();
            SettingsChanged(this);
        }
    }
 
}
На событие подписан метод класса менеджера:

C#
1
2
3
4
5
6
7
8
9
10
11
12
    public void WriteSettingFile(Settings setting)
    {
        try
        {
            settings.ToXml(path);
        }
        catch (Exception ex)
        {
            Logger.WriteLog(LogMode.E,ex.Message);
        }
    }
}

Метод расширения ToXml:
C#
1
2
3
4
5
6
7
8
  public static void ToXml<T>(this T index,string path)
    {
        XmlSerializer ser = new XmlSerializer(typeof(T));
        using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
        {
            ser.Serialize(fs, index);
        }
    }

Падает по Exception:
Message: Exception: Exception has been thrown by the target of an invocation
Data: System.Collections.Hashtable

Когда комментирую строку с генерацией события - все ок.

З.Ы. Практически тоже самое получаю, если десериализую в json с Newtonsoft.json.

Подскажите, как это обойти, и есть ли какой-то альтернативный вариант отслеживать изменения свойств (но не OnPropertyChanged). Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2018, 13:01
Ответы с готовыми решениями:

Ошибка при десериализации
Здравствуйте, уважаемые форумчане! Подскажите пожалуйста. Я написал класс который сериализует и...

Ошибка при десериализации
Привожу код сериализации и отправки объекта: public void SendRezult(object rezult) { ...

Ошибка сериализации/десериализации
Подскажите что не так? private void button3_Click(object sender, EventArgs e) { ...

Ошибка при десериализации
Пробую считать XML документ. в try catch выдаёт ошибку - There is an Error in XML document (2,2)...

3
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
17.05.2018, 15:16 2
Цитата Сообщение от any2key Посмотреть сообщение
Message: Exception: Exception has been thrown by the target of an invocation
На какой строке ошибка возникает?

Цитата Сообщение от any2key Посмотреть сообщение
C#
1
public static void ToXml<T>(this T index,string path)
А что если сделать эту функцию не generic-ом, та же ошибка?
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
17.05.2018, 15:58 3
1) для полной картины из ошибки при наличии InnerException доставайте и его сообщение
2) У класса атрибут [Serializable] присутствует то?
0
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 4
17.05.2018, 16:11  [ТС] 4
Всем спасибо за ответы!
Проблема решилась, и, как обычно это бывает, была на поверхности: десериализатор создает новый объект, а подписываемся на ивент в классе менеджера, о котором класс Settings ничего не знает.
0
17.05.2018, 16:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2018, 16:11
Помогаю со студенческими работами здесь

Ошибка при десериализации листа
Всем привет! Народ такая проблема, хз вообще не понимаю, что происходит.. помогите разобраться. ...

Ошибка при десериализации объекта
&lt;?xml version=&quot;1.0&quot;?&gt; &lt;Command xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;...

Постоянная ошибка при десериализации
Пишу свою игрушку. Сделал загрузку через десериализацию класса из xml. Вот код: public Hero...

Ошибка в XML файле при десериализации
когда пытюсь десериализовать файл , то выдаёт ошибку - There is an error in XML document (8,5)...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru