2017-02-16 214 views
1

我试图将一个类保存到XML文档中。 类看起来是这样的:序列化到XML文件创建无效的XML文档(11,12)

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

数据IST通过该存储:

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

你可以告诉我为什么?

+0

这是一个骗局。但简单地通过用Create创建'OpenOrCreate'来解决这个问题。 –

+0

@klashar - 不,那个人甚至都不是。 –

回答

2

发生这种情况是因为您正在写入的内容比文件的现有内容短,所以有些文本留在最后。

代替FileMode.OpenOrCreate(这将打开文件,如果文件存在离开其内容不变),使用FileMode.Create

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

说明FileMode.Create

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

+0

完美,工作。 –