如何序列化System.Security.AccessControl.FileSecurity?

gpa*_*ent 3 .net windows serialization acl

我正在为我们的内部软件开发小规模部署系统,该软件管理多种数据的备份.部分任务是备份某些文件夹,我想备份应用于这些文件夹的ACL,以便在恢复时文件仍然按预期工作.

原型设计一些代码,我尝试过使用.NET的内置XmlSerializer,但无济于事.

这是示例代码:

public static byte[] SerializeFileACL(string path)
{
    var acl = File.GetAccessControl(path, AccessControlSections.All);

    using (var ms = new MemoryStream())
    {
        _fileSerializer.Serialize(ms, acl);
        return ms.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,无论我尝试使用哪个文件,它都会返回相同的143个字节.有没有一种使用.NET工具序列化ACL的好方法?我究竟做错了什么?

PS:是的,我知道ACL可能不适用于其他计算机.这不是这个项目的问题.

Mic*_*ray 6

您可以简单地调用MSDN描述NativeObjectSecurity.Persist方法来序列化此对象.正如一个人提到的那样,对象不包含a ,因此你不能以友好的方式序列化对象图.SerializableAttribute