[英]Export application settings to XML
以下情況:
我將一些值保存到應用程序設置(Properties.Settings)中。在此設置中,我還保存了一些對象,這些對象的屬性存儲在該對象中。
現在,我想實現一個將設置導出到xml文件的功能。
對於整數值和字符串,我這樣做:
XmlWriter writer = XmlWriter.Create(path, settings);
writer.WriteStartDocument();
writer.WriteElementString("ServerIP", Settings.Default.ServerIP);
writer.WriteElementString("ServerPort", Settings.Default.ServerPort.ToString());
writer.WriteEndDocument();
writer.Flush();
writer.Close();
好吧..我希望這是到目前為止的正確方法。
現在我需要將對象存儲到該文件中。
我的想法是使用XmlSerializer類。 但是不幸的是,我完全不知道如何使用它來將對象與一個XML文件中的其他值組合在一起
另外,這里是我要寫入XML文件的類的代碼: http : //pastebin.com/PmB4tM7b
為了對您的對象使用XML序列化,您需要使用預定義的序列化屬性來修飾保存類的類或數據結構:
// block of settings like
// <Service>
// <Name>Service1</Name>
// <Description>Starts the service 1</Description>
// </Service>
public class SettingsService
{
// will be a node in the XML file
[XmlElement(ElementName="Name")]
public string Name { get; set; }
// will be a node too
[XmlElement(ElementName="Description")]
public string Description { get; set; }
}
// holds a list of services
// <Services>
// <Service>...</Service>
// <Service>...</Service>
// </Services>
public class ServicesSettings
{
// list of services
[XmlArray(ElementName="SettingsServices")]
public List<SettingsService> Services { get; set; }
// single value!
[XmlElement(ElementName="SettingsPort")]
public int PortNumber { get; set; }
}
// serializes the objects to XML file
public void SerializeModels(string filename, ServicesSettings settings)
{
var xmls = new XmlSerializer(settings.GetType());
var writer = new StreamWriter(filename);
xmls.Serialize(writer, settings);
writer.Close();
}
// retrieves the objects from an XML file
public ServicesSettings DeserializeModels(string filename)
{
var fs = new FileStream(filename, FileMode.Open);
var xmls = new XmlSerializer(typeof(WindowsServicesControllerSettings));
return (WindowsServicesControllerSettings) xmls.Deserialize(fs);
}
可以這樣使用:
var service1 = new SettingsService { Name = "Service1", Description = "Blah blah" };
var service2 = new SettingsService { Name = "Service2", Description = "Blah blah blup" };
var services = new List<SettingsService> { service1, service2 };
var settings = new ServicesSettings
{
Services = services,
PortNumber = 1234
};
this.SerializeModels(@"d:\temp\settings.xml", settings);
此行創建以下XML文件:
<?xml version="1.0" encoding="utf-8"?>
<ServicesSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SettingsServices>
<SettingsService>
<Name>Service1</Name>
<Description>Blah blah</Description>
</SettingsService>
<SettingsService>
<Name>Service2</Name>
<Description>Blah blah blup</Description>
</SettingsService>
</SettingsServices>
<SettingsPort>1234</SettingsPort>
</ServicesSettings>
從XML文件檢索對象:
var settings = this.DeserializeModels(@"d:\temp\settings.xml");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.