2017-02-16 95 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

Это обман. Но просто решите его, заменив 'OpenOrCreate' на' Create' –

+0

@klashar - нет, что он даже не закрыт. –

ответ

2

Это происходит потому, что содержимое, которое вы пишете, короче существующего содержимого файла, поэтому часть текста остается в конце.

Вместо FileMode.OpenOrCreate (который открывает файл и оставляет его содержимое нетронутыми, если файл существует), используйте FileMode.Create:

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

Описание FileMode.Create:

Указывает, что операционная система должна создать новый файл. Если файл уже существует, он будет перезаписан. Для этого требуется разрешение FileIOPermissionAccess.Write. FileMode.Create эквивалентно запросу, если файл не существует, используйте CreateNew; в противном случае используйте Truncate. Если файл уже существует, но является скрытым файлом, генерируется исключение UnauthorizedAccessException.

+0

Отлично, что сработало. –

 Смежные вопросы

  • Нет связанных вопросов^_^