C#序列化创建一个空文件

时间:2018-10-11 00:16:14

标签: c# serialization

我正在尝试使用C#开发一个库应用程序,但是我陷入了ObservableCollection类的序列化中。

功能测试为:

[].concat(...responses.map(res => res.data));

我认为它是自动记录的,易于理解。 我面临两个问题: -测试后,创建了一个保存文件,但是测试失败消息告诉我saveFileExists()方法返回false。 -保存文件是在正确的目录中创建的,但是它是一个空文件,我不知道为什么。

这是我专用于文件管理的工具类:

 [TestMethod]
        public void saveFile_createTheFile()
        {

            var btn_saveFile = createA<WpfButton>("btn_saveToFile");
            if (fileManager.saveFileExists())
                return;

            btn_saveFile.Click();

            fileManager.saveFileExists().ShouldBeTrue();

        }

有人可以告诉我为什么会出现这两个错误吗?

谢谢

ps:启动时,该集合包含2本书。Book类可序列化。

编辑

我找到了原因:通过调试,我得到了这个错误:在“ formatter.Serialize(...)”方法处,出现错误“ PropertyChangeEventManager无法序列化”。确实,这是Book类:

public class FileManager
    {
        private string SAVEFILE = "datas.saved";
        public string appDir = null;
        public string pathToSaveFile = null;

        public FileManager()
        {
            appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
            pathToSaveFile = Path.Combine(appDir, SAVEFILE);
        }

        public Boolean saveFileExists()
        {
            return File.Exists(Directory.GetCurrentDirectory() + "\\" + SAVEFILE);

        }

        public void saveToFile(ObservableCollection<Book> books)
        {

            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(SAVEFILE, FileMode.Create, FileAccess.Write, FileShare.None);
            formatter.Serialize(stream, books.ToArray());
            stream.Close();

        }

    }

这是一个子类,基类肯定添加了一些不可序列化的字段。如何避免这种情况?我是wpf的新手,但我认为Book中的通知是强制性的,以便告知窗口的绑定组件已完成更改。

0 个答案:

没有答案