【问题标题】:Serializing to XML file creates invalid XML document (11,12) [duplicate]序列化为 XML 文件会创建无效的 XML 文档 (11,12) [重复]
【发布时间】:2017-07-05 08:12:36
【问题描述】:

我正在尝试将一个类保存到 XML 文档中。 这个类看起来像这样:

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>>>

你能告诉我为什么吗?

【问题讨论】:

  • 这是一个骗子。但只需将OpenOrCreate替换为Create即可解决
  • @klashar - 不,那个甚至不接近。

标签: c# xml serialization xml-serialization xmlserializer


【解决方案1】:

发生这种情况是因为您正在编写的内容比文件的现有内容短,因此一些文本留在了末尾。

使用FileMode.Create,而不是FileMode.OpenOrCreate(如果文件存在则打开文件并保持其内容不变):

FileStream outFile = File.Open(MySettingsFile, FileMode.Create);

FileMode.Create的描述:

指定操作系统应该创建一个新文件。如果文件已经存在,它将被覆盖。这需要 FileIOPermissionAccess.Write 权限。 FileMode.Create相当于请求如果文件不存在就使用CreateNew;否则,使用截断。如果文件已经存在但为隐藏文件,则抛出 UnauthorizedAccessException 异常。

【讨论】:

  • 完美,成功了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多