此问题已经在这里有了答案:
我有一个正在尝试实现加载和保存设置的功能的应用程序。我从另一个SO用户的问题中得到了一些示例代码,并且它可以正常工作,但是我不确定出什么问题。
我正在使用XmlSerializer将AppSettings对象保存到下面代码中的文件中,并将文件读回到该对象中。如果没有文件,它将设置默认值并保存,然后再将对象返回到主应用程序。
public class AppSettings
{
static string applicationPath = AppDomain.CurrentDomain.BaseDirectory;
string settingsFile = applicationPath + "Settings.xml";
internal string databaseName;
public void Save()
{
try
{
using (StreamWriter writer = new StreamWriter(settingsFile))
{
XmlSerializer serializer = new XmlSerializer(typeof(AppSettings));
serializer.Serialize(writer, this);
}
}
catch
{
}
}
public AppSettings Read()
{
if (File.Exists(settingsFile))
{
try
{
using (StreamReader reader = new StreamReader(settingsFile))
{
XmlSerializer deserializer = new XmlSerializer(typeof(AppSettings));
return deserializer.Deserialize(reader) as AppSettings;
}
}
catch
{
return GetDefaults();
}
}
else
{
return GetDefaults();
}
}
public AppSettings GetDefaults()
{
databaseName = "DBNAME";
Save();
return this;
}
}
我没有收到任何错误,并且正在生成Settings.xml文件,但是似乎没有保存databaseName对象。读取文件似乎也可以正常工作,但是databaseName值为null。正在检查xml文件,除了xml元数据标记外,我看不到任何数据,因此我假设我最初保存AppSettings对象的方法有误。
XML文件内容:
<?xml version="1.0" encoding="utf-8"?>
<AppSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
好吧,我通过将databaseName公开给了我,而这并不是我想要的,但没关系,我将其包装在一个公开的文件中;私人套装;财产。