没有处置的Xml序列化

Dab*_*rnl 6 .net idisposable xml-serialization

       using (var file_stream = File.Create("users.xml"))
        {
            var serializer = new XmlSerializer(typeof(PasswordManager));
            serializer.Serialize(file_stream, this);
            file_stream.Close();
        }
Run Code Online (Sandbox Code Playgroud)

使用上面的代码非常有效.但是,当我把它缩短为:

          var serializer = new XmlSerializer(typeof(PasswordManager));
          serializer.Serialize(File.Create("users.xml"), this);
Run Code Online (Sandbox Code Playgroud)

当我尝试在同一测试中反序列化users.xml文件时,我得到以下异常:进程无法访问文件'users.xml',因为它正由另一个进程使用.

原因似乎是File.Create方法返回一个打开的FileStream,我无法关闭,因为我没有保留它的引用.

我的坏,还是微软的?;-)

Dar*_*rov 11

问题是,在第二个示例中,您打开了一个永远不会丢弃的文件句柄,因此第二次调用方法时,它将抛出您描述的异常.第一个片段是更好的方式(你可以删除file_stream.Close()位 - 它将由Stream.Dispose()自动调用).