如何使用 System.Directory.AccountManagement 将扩展 UserPrincipal 数组 属性 设置为空

How can I set an Extended UserPrincipal Array Property as empty with System.Directory.AccountManagement

如标题中所述,我正在使用帐户管理的主要扩展 API 来获取和设置自定义 AD 用户属性。其中两个自定义属性是字符串数组。我现在遇到的问题是,每当我尝试将 属性 设置为空数组时,我都会收到错误消息。

我的扩展 UserPrincipal 如下所示:

    [DirectoryRdnPrefix("CN")]
    [DirectoryObjectClass("user")]
    class UserPrincipalEx : UserPrincipal
    {
        public UserPrincipalEx(PrincipalContext context) : base(context) { }
        public UserPrincipalEx(PrincipalContext context, string samAccountName, string password, bool enabled):base(context, samAccountName, password, enabled) { }
        
        [DirectoryProperty("course")]
        public string[] course
        {
            get
            {
                int len = ExtensionGet("course").Length;

                string[] courses = new string[len];
                object[] coursesRaw = ExtensionGet("course");

                for (int i = 0; i < len; i++)
                {
                    courses[i] = (string)coursesRaw[i];
                }
                return courses;
            }
            sset 
            {
                this.ExtensionSet("course", value);
            }
        }

        [DirectoryProperty("interested")]
        public string[] interested
        {
            get
            {
                int len = ExtensionGet("interested").Length;

                string[] interested = new string[len];
                object[] interestedRaw = ExtensionGet("interested");

                for (int i = 0; i < len; i++)
                {
                    interested[i] = (string)interestedRaw[i];
                }
                return interested;
            }
            set 
            {
                this.ExtensionSet("interested", value);
            }
        }
        public static new UserPrincipalEx FindByIdentity(PrincipalContext context, string identityValue)
        {
            return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityValue);
        }

        public static new UserPrincipalEx FindByIdentity(PrincipalContext context, IdentityType identityType, string identityValue)
        {
            return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityType, identityValue);
        }
    }

我正在尝试像这样设置属性:

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, Settings.Default.DCName))
{
       UserPrincipalEx exUser = UserPrincipalEx.FindByIdentity(pc, newMailUser.Name);
                        
       exUser.interested = CourseInterested.ToStringArray(newMailUser.CInterested);
       exUser.course = CourseVisited.ToStringArray(newMailUser.CVisited);
                        
       exUser.Save(pc);
}

ToStringArray 方法return 一个带有值或空值的字符串数组。当 newMailUser.CInterestednewMailUser.CVIsited 没有条目并且空字符串数组被 return 编辑时代码失败,并显示错误消息“Collections whoes elements are another collection cannot由 ExtensionClasses 设置。”而且错误说它发生在扩展 属性 ExtensionSet("property", value)

的设置方法中

我使用了 this microsoft example. I also tried this 方法,但遗憾的是它对我不起作用。

如果有人愿意提供帮助,我将不胜感激。

好吧,这比我想象的要容易得多。如果 newMailUser.CInterestednewMaliUser.CVisited 中没有条目,我只需要从我的 ToStringArray 方法中 return null 因为 ExtensionSet 方法没有问题null.