В настоящее время я пытаюсь написать набор из двух классов: один (BackgroundManagerSettings), который будет содержать все переменные, которые я хочу сохранить, когда программа закрыта, а другая (BackgroundManager), которая содержит методы и переменные, которые понадобятся только во время выполнения.XmlSerializing только базовый объект
код:
public class BackgroundManager : BackgroundManagerSettings
{
//Example
private string _LastName;
public string LastName
{
get
{
return this._LastName;
}
set
{
this._LastName = value;
}
}
public BackgroundManager()
{
this.LastName = "Smith";
}
public static BackgroundManager Load(string filename)
{
XmlSerializer Serializer = new XmlSerializer(typeof(BackgroundManager));
LoopAgain:
try
{
using (StreamReader Reader = new StreamReader(filename))
{
return Serializer.Deserialize(Reader) as BackgroundManager;
}
}
catch (FileNotFoundException)
{
using (StreamWriter Writer = new StreamWriter(filename))
{
Serializer.Serialize(Writer, new BackgroundManager() as BackgroundManagerSettings);
Writer.Close();
}
goto LoopAgain;
}
catch (InvalidOperationException)
{
File.Delete(filename);
goto LoopAgain;
}
}
public void Save(string filename)
{
XmlSerializer Serializer = new XmlSerializer(typeof(BackgroundManager));
using (StreamWriter Writer = new StreamWriter(filename))
{
Serializer.Serialize(Writer, this as BackgroundManagerSettings);
Writer.Close();
}
}
}
public abstract class BackgroundManagerSettings
{
//Example
private string _FirstName;
[XmlElement("FirstName")]
public string FirstName
{
get
{
return this._FirstName;
}
set
{
this._FirstName = value;
}
}
public BackgroundManagerSettings()
{
this.FirstName = "Joe";
}
}
Использование:
BackgroundManager Manager = BackgroundManager.Load("temp.Xml");
Manager.Save("temp.Xml");
Выход:
<?xml version="1.0" encoding="UTF-8"?>
<BackgroundManager xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FirstName>Joe</FirstName>
<LastName>Smith</LastName>
</BackgroundManager>
Моя текущая проблема заключается в том, что, когда я использую метод Save() он упорядочивает поля BackgroundManager а также поля BackgroundManagerSettings. Как это сделать, чтобы он только сериализовал поля BackgroundManagerSettings? Любая помощь или ссылки, чтобы указать мне в правильном направлении, были бы очень признательны.
Это был бы мой последний прибежище. Я бы предпочел не вручную устанавливать каждого участника. Но спасибо за предложение. – masterterranova
Else, Не наследуйте от BackgroundManagerSettings. –