Есть класс Settings
[Serializable]
public class Settings
{
public bool UseSpecifiedAccount = false;
public string Login = String.Empty;
public string Password = String.Empty;
public string ConnectionString = String.Empty;
public bool SaveToDB = false;
public bool SaveToCSV = false;
public bool SaveToHTML = false;
}
Есть форма с полями и чекбоскаси, на которой отображаются эти же свойства. При загрузке формы данные десериализуются.
// Считываем настройки из файла Settings.xml
Settings setting;
XmlSerializer formatter = new XmlSerializer(typeof(Settings));
using (FileStream fs = new FileStream("Settings.xml", FileMode.OpenOrCreate))
{
setting = (Settings)formatter.Deserialize(fs);
}
this.UseSpecifiedAccount.Checked = setting.UseSpecifiedAccount;
this.Login.Text = setting.Login;
this.Passwors.Text = setting.Password;
this.SaveToDatabase.Checked = setting.SaveToDB;
this.ConnectionString.Text = setting.ConnectionString;
this.SaveToCSV.Checked = setting.SaveToCSV;
this.SaveToHTML.Checked = setting.SaveToHTML;
По нажатию кнопки "Сохранить" данные с формы сохраняются в файл.
//Переносим настройки с формы в сериализуемый объект
Settings setting = new Settings()
{
UseSpecifiedAccount = this.UseSpecifiedAccount.Checked,
Login = this.Login.Text,
Password = this.Passwors.Text,
SaveToDB = this.SaveToDatabase.Checked,
ConnectionString = this.ConnectionString.Text,
SaveToCSV = this.SaveToCSV.Checked,
SaveToHTML = this.SaveToHTML.Checked
};
// Сохраняем настройки в файл Settings.xml
XmlSerializer formatter = new XmlSerializer(typeof(Settings));
using (FileStream fs = new FileStream("Settings.xml", FileMode.OpenOrCreate))
{
formatter.Serialize(fs, setting);
}
Проблема в том, что иногда данные сериализуются не правильно, например, вместо </Settings>
в конце файла записывает </Settings></Settings>
и эти данные не могут быть десериализуемы. Это происходит если я сохраню поле пароль с каким-то текстом, а затем очищу поле и сохраню пустую строку.
При использовании FileMode.OpenOrCreate
открывается уже существующий файл, если он есть. Старое содержимое в нём сохраняется. Отсюда и мусор, если записываемое содержимое окажется короче имеющегося.
Используйте при сохранении FileMode.Create
- тогда каждый раз будет создаваться новый файл.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть 2 формы Form1 и Form2Вторая форма открывается с первой :
Всем привет! Вот такой у меня вопросПытаюсь осознать DDD и делаю web приложения на asp