Будет ли XmlSerializer когда-либо создавать пустые документы - PullRequest
2 голосов
/ 07 декабря 2010

Хорошо, следующий код, который у меня был в работе более года без изменений.Это работало довольно хорошо.За последний месяц более чем несколько машин сообщают, что XML-документы полностью пусты.Они даже не содержат заголовок xml.Я не могу дублировать файлы, которые внезапно становятся пустыми, и не могу предложить способ, чтобы это произошло.Я надеюсь, что у кого-то была похожая проблема, которую они решили.

Большая часть машины, которая использовала этот код, использовала его около года, если не больше.Пустые файлы имели данные и списки в них. Файлы не сериализуются одновременно.Сохранение / сериализация один за другим до выхода из программы.

Мои вопросы: возможно ли для приведенного ниже кода создать пустой файл?Что еще заставит их внезапно опустеть?У кого-нибудь еще были проблемы с XML-сериализатором в прошлом месяце?(Эта проблема возникла только в прошлом месяце на сборках, которые были стабильными в течение 3+ месяцев.)

Если у вас есть вопросы или я что-то упустил, спросите, пожалуйста.Также существует большое разнообразие типов, которые я сериализую ... поэтому, если вы можете себе это представить, у меня, вероятно, есть нечто подобное, которое сериализуется.

Ответы [ 2 ]

7 голосов
/ 14 января 2012

Мы сталкивались с этой проблемой несколько раз на $ WORK, при этом симптомом был пустой файл правильного размера, но заполненный нулевыми байтами.

Мы нашли решение установить значение WriteThrough для FileStream:

using (Stream file = new FileStream(settingTemp, FileMode.Create,
                                   FileAccess.Write, FileShare.None,
                                   0x1000, FileOptions.WriteThrough))
{
   using (StreamWriter sw = new StreamWriter(file))
   {
      ...
   }
}
3 голосов
/ 07 декабря 2010

Единственная причина, по которой я могу думать, что это произойдет, заключается в том, что эта строка:

(new XmlSerializer(this.GetType())).Serialize(textWrite, this);

выдает исключение, и текстописатель создается и удаляется, даже ничего не записав в него.Я бы посмотрел ваш журнал на наличие ошибок.

Что делает

Static.Backup.XmlFile(FileSaveLocation);

?

...