【发布时间】:2020-02-21 07:31:10
【问题描述】:
我有一个应用程序正在尝试实现加载和保存设置的功能。我从另一个 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 值为空。检查 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" />
【问题讨论】:
-
XmlSerializer仅序列化 public 属性和字段。请参阅:Using XmlSerializer with private and public const properties 和 Serializing private member data。您的AppSettings没有公共成员。
标签: c# settings xmlserializer