Лабораторная работа № 2
Задание: Реализовать оконное приложение (Windows Forms).
Оконное приложение должно позволять создавать объекты, отображать список созданных объектов в табличной форме, выполнять поиск. Реализовать сериализацию и десериализацию классов в приложении. Интерфейс приложения должен быть дополнен кнопками для сохранения и загрузки классов из XML файлов.
Операции сохранения и загрузки XML файлов должны быть выполнены с использованием методов async и await.
Вспомогательный материал:
В Visual Studio должен быть выбран тип проекта – оконное приложение. Результат должен представлять собой исполняемый файл «*.exe».
В лабораторной работе необходимо создать по несколько объектов каждого класса, вывести созданные объекты в таблицу (таблицы). Для хранения списка объектов использовать шаблонный класс коллекцию System.Collections.Generic.List<T>. Для поиска использовать LINQ технологию.
Ресурсы:
Практическое руководство. Создание оконного приложения C#: http://msdn.microsoft.com/ru-ru/library/dd492132.aspx
LINQ to Objects: http://msdn.microsoft.com/ru-ru/library/bb397919.aspx
Async и await: http://stephenhaunts.com/2014/10/10/simple-async-await-example-for-asynchronous-programming/
Каждый класс в библиотеке классов должен быть помечен, как сериализуемый с использованием атрибута [Serializable]. Сериализация должна выполняться в xml-файл в текстовом виде (не бинарном).
Простой пример сериализации (в разделе «using» подключить пространство имен System.Xml.Serialization):
[Serializable]
public class GlobalSettingssDescriptor
{
public GlobalSettingssDescriptor()
{
}
private Guid _SettingsGuid;
public Guid SettingsGuid
{
get { return _SettingsGuid; }
set { _SettingsGuid = value; }
}
private string _ConnectionStringToWCServer;
public string ConnectionStringToWCServer
{
get { return _ConnectionStringToWCServer; }
set { _ConnectionStringToWCServer = value; }
}
private string _ConnectionStringToWCServerShowDirsTask;
public string ConnectionStringToWCServerShowDirsTask
{
get { return _ConnectionStringToWCServerShowDirsTask; }
set { _ConnectionStringToWCServerShowDirsTask = value; }
}
private string _ConnectionStringToWCServerDownloadFilesTask;
public string ConnectionStringToWCServerDownloadFilesTask
{
get { return _ConnectionStringToWCServerDownloadFilesTask; }
set { _ConnectionStringToWCServerDownloadFilesTask = value; }
}
private string _ConnectionStringToWCServerShowFilesInDirs;
public string ConnectionStringToWCServerShowFilesInDirs
{
get { return _ConnectionStringToWCServerShowFilesInDirs; }
set { _ConnectionStringToWCServerShowFilesInDirs = value; }
}
private string _ConnectionStringToAllIterations;
public string ConnectionStringToAllIterations
{
get { return _ConnectionStringToAllIterations; }
set { _ConnectionStringToAllIterations = value; }
}
private string _InstanceName;
public string InstanceName
{
get { return _InstanceName; }
set { _InstanceName = value; }
}
private string _UserName;
public string UserName
{
get { return _UserName; }
set { _UserName = value; }
}
private byte[] _UserPass;
public byte[] UserPass
{
get { return _UserPass; }
set { _UserPass = value; }
}
public string ProjectName { get; set; }
}
[Serializable]
public class AllGlobalSettingss
{
public List<GlobalSettingssDescriptor> GlobalSettingss = new List<GlobalSettingssDescriptor>(10);
public void AddSettingsDescription()
{
}
public void AddSettingsDescription(string UserName, string InstanceName, byte[] UserPass, string ConnectionStringToWCServer, string ConnectionStringToWCServerShowDirsTask, string ConnectionStringToWCServerDownloadFilesTask, string ConnectionStringToWCServerShowFilesInDirs, string AllIterationsText,string ProjectName)
{
GlobalSettingssDescriptor NewSettings = new GlobalSettingssDescriptor();
NewSettings.SettingsGuid = Guid.NewGuid();
NewSettings.UserName = UserName;
NewSettings.UserPass = UserPass;
NewSettings.ConnectionStringToWCServer = ConnectionStringToWCServer;
NewSettings.ConnectionStringToWCServerShowDirsTask = ConnectionStringToWCServerShowDirsTask;
NewSettings.ConnectionStringToWCServerDownloadFilesTask = ConnectionStringToWCServerDownloadFilesTask;
NewSettings.ConnectionStringToWCServerShowFilesInDirs = ConnectionStringToWCServerShowFilesInDirs;
NewSettings.InstanceName = InstanceName;
NewSettings.ConnectionStringToAllIterations = AllIterationsText;
NewSettings.ProjectName = ProjectName;
GlobalSettingss.Add(NewSettings);
}
}
public static bool SerializeGlobalSettingss(string PathToSettingssFile, AllGlobalSettingss GlobalSettingss)
{
try
{
XmlWriter writer = new XmlTextWriter(PathToSettingssFile, System.Text.Encoding.UTF8);
XmlSerializer serializer = new XmlSerializer(typeof(AllGlobalSettingss));
serializer.Serialize(writer, GlobalSettingss);
writer.Close();
return true;
}
catch (Exception exp)
{
return false;
}
}
public static AllGlobalSettingss DeserializeGlobalSettingss(string PathToSettingssFile)
{
try
{
XmlReader reader = new XmlTextReader(PathToSettingssFile);
XmlSerializer serializer = new XmlSerializer(typeof(AllGlobalSettingss));
AllGlobalSettingss GlobalSettingss = (AllGlobalSettingss)serializer.Deserialize(reader);
reader.Close();
return GlobalSettingss;
}
catch (Exception exp)
{
return new AllGlobalSettingss();
}
}
Ресурсы:
Сериализация: http://msdn.microsoft.com/ru-ru/library/ms233843.aspx
Примеры XML-сериализации: http://msdn.microsoft.com/ru-ru/library/vstudio/58a18dwa(v=vs.100).aspx
Сериализация, пример ресурса Code Project: http://www.codeproject.com/Articles/483055/XML-Serialization-and-Deserialization-Part (а так же http://www.codeproject.com/Articles/36781/Serialization-and-Deserialization-in-ASP-NET-with)
