序列化到 XML 文件会创建无效的 XML 文档 (11,12)
Serializing to XML file creates invalid XML document (11,12)
我正在尝试将 class 保存到 XML 文档中。
class 看起来像这样:
public class Settings
{
public LDAP LDAP;
public Miscellaneous Miscellaneous;
}
public class LDAP
{
public bool LoadLDAPData;
public bool ShowLDAPRoutingMessage;
}
public class Miscellaneous
{
public bool MinusBeforeQuestion;
public bool MinusBeforeDescription;
}
通过此存储数据:
Settings MySettings = new Settings();
string MySettingsFile = @"settingsfile.xml";
...
FileStream outFile = File.Open(MySettingsFile, FileMode.OpenOrCreate);
XmlSerializer formatter = new XmlSerializer(MySettings.GetType());
formatter.Serialize(outFile, MySettings);
outFile.Close();
数据已保存,但最后有一个问题:
<Settings...>
...
</Settings>>>
你能告诉我为什么吗?
发生这种情况是因为您正在编写的内容比文件的现有内容短,所以一些文本留在最后。
而不是 FileMode.OpenOrCreate
(打开文件并在文件存在的情况下保持其内容不变),使用 FileMode.Create
:
FileStream outFile = File.Open(MySettingsFile, FileMode.Create);
FileMode.Create
的描述:
Specifies that the operating system should create a new file. If the file already exists, it will be overwritten. This requires FileIOPermissionAccess.Write permission. FileMode.Create is equivalent to requesting that if the file does not exist, use CreateNew; otherwise, use Truncate. If the file already exists but is a hidden file, an UnauthorizedAccessException exception is thrown.
我正在尝试将 class 保存到 XML 文档中。 class 看起来像这样:
public class Settings
{
public LDAP LDAP;
public Miscellaneous Miscellaneous;
}
public class LDAP
{
public bool LoadLDAPData;
public bool ShowLDAPRoutingMessage;
}
public class Miscellaneous
{
public bool MinusBeforeQuestion;
public bool MinusBeforeDescription;
}
通过此存储数据:
Settings MySettings = new Settings();
string MySettingsFile = @"settingsfile.xml";
...
FileStream outFile = File.Open(MySettingsFile, FileMode.OpenOrCreate);
XmlSerializer formatter = new XmlSerializer(MySettings.GetType());
formatter.Serialize(outFile, MySettings);
outFile.Close();
数据已保存,但最后有一个问题:
<Settings...>
...
</Settings>>>
你能告诉我为什么吗?
发生这种情况是因为您正在编写的内容比文件的现有内容短,所以一些文本留在最后。
而不是 FileMode.OpenOrCreate
(打开文件并在文件存在的情况下保持其内容不变),使用 FileMode.Create
:
FileStream outFile = File.Open(MySettingsFile, FileMode.Create);
FileMode.Create
的描述:
Specifies that the operating system should create a new file. If the file already exists, it will be overwritten. This requires FileIOPermissionAccess.Write permission. FileMode.Create is equivalent to requesting that if the file does not exist, use CreateNew; otherwise, use Truncate. If the file already exists but is a hidden file, an UnauthorizedAccessException exception is thrown.