7
votes

Comment convertir la propriétéValuecollection en liste C #? (RésultatsPropertyCollection, SearchResult, LDAP)

J'ai tiré une requête pour lire des trucs d'Active Directory. Mais le résultat a une sorte de "résultatsPropertyCollection" en tant que propriété. Tout corps sait comment puis-je le convertir en une liste (comme la liste générique)? XXX

Merci Farzad


0 commentaires

4 Réponses :


13
votes

Vous ne pouvez pas - au moins pas très facilement.

Si vous souhaitez simplement avoir simplement une liste de types SearchResult code>, vous pouvez utiliser: p> xxx pré>

mais si vous voulez les valeurs réelles de Les résultats de la recherche, vous devez faire plus de travail. P>

Fondamentalement, cette collection contient toutes les propriétés que vous avez définies pour la recherche - au moins tant qu'ils contiennent une valeur! P>

Donc vraiment, ce que vous devez faire est de créer une classe pour contenir ces valeurs. Les deux éléments sont Membre de code> et MEMBRES CODE> peuvent-ils contenir des valeurs multiples (ce sont des attributs "multi-évalués" en publicité) - vous aurez donc besoin d'une liste de chaînes pour CES: P>

public YourType ConvertToYourType(SearchResult result)
{
    YourType returnValue = new YourType();
    returnValue.MemberOf = new List<string>();
    returnValue.Member = new List<string>();

    if(result.Properties["samAccountName"] != null && result.Properties["samAccountName"].Count > 0)
    {
       returnValue.SamAccountName = result.Properties["samAccountName"][0].ToString();
    }

    // ..... and so on for each of your values you need to extracxt

    return returnValue;
}


2 commentaires

+1, je n'ai pas pu comprendre comment obtenir la valeur spécifique dont j'avais besoin.


Quel est le but de Membre et de membre pour le retourvalu?



0
votes

Cela pourrait ne pas être une solution complète ni la bonne réponse. Vous trouverez ci-dessous seulement une solution pour convertir SearchResultCollection à la liste xxx


0 commentaires

0
votes

Ne pouvons-nous pas utiliser quelque chose comme ça? (Comme je l'utilise actuellement)

ds.FindAll().Cast<SearchResult>().Select(result => new Address(result.GetDirectoryEntry())).ToList();

public class Address
{
    internal Address(DirectoryEntry entry)
    {
        //
        // You can get one or more of the following properties:
        //
        //
        // objectClass
        // cn
        // description
        // givenName
        // distinguishedName
        // instanceType
        // whenCreated
        // whenChanged
        // displayName
        // uSNCreated
        // memberOf
        // uSNChanged
        // homeMTA
        // proxyAddresses
        // homeMDB
        // mDBUseDefaults
        // mailNickname
        // protocolSettings
        // name
        // objectGUID
        // userAccountControl
        // badPwdCount
        // codePage
        // countryCode
        // badPasswordTime
        // lastLogon
        // pwdLastSet
        // primaryGroupID
        // objectSid
        // accountExpires
        // logonCount
        // sAMAccountName
        // sAMAccountType
        // showInAddressBook
        // legacyExchangeDN
        // userPrincipalName
        // lockoutTime
        // objectCategory
        // dSCorePropagationData
        // lastLogonTimestamp
        // textEncodedORAddress
        // mail
        // msExchPoliciesExcluded
        // msExchMailboxTemplateLink
        // msExchRecipientDisplayType
        // msExchUserCulture
        // msExchVersion
        // msExchRecipientTypeDetails
        // msExchHomeServerName
        // msExchALObjectVersion
        // msExchMailboxSecurityDescriptor
        // msExchUserAccountControl
        // msExchMailboxGuid
        // nTSecurityDescriptor

        // As an example we get only two properties
        this.DisplayName = (string)entry.Properties["displayName"].Value;
        this.Mail = (string)entry.Properties["mail"].Value;
        Manager = (string)entry.Properties["manager"].Value;
    }

    public string DisplayName
    {
        get;
        private set;
    }

    public string Manager
    {
        get;
        private set;
    }

    public string Mail
    {
        get;
        private set;
    }
}


0 commentaires

3
votes

J'étais aussi confus au début, mais tout était important d'obtenir le type de la collection de propriétés. Une fois que j'ai découvert que le type de l'élément de propriétés est System.Collections.ddicteraryRyRyRy et que la valeur est une collection faite des éléments de résultatPropertyvaluecollection, des itérations simples étaient possibles.

Voici ce que j'ai fini avec: p>

/* Value of userData Obtained with Json serializator*/

{"givenname":["First Name"],"samaccountname":["User.Name"],"cn":["First Name Last Name"],"pwdlastset":[131641282827115142],"whencreated":["2017-10-12T22:16:43"],"badpwdcount":[0],"displayname":["First Name Last Name"],"lastlogon":[131648243091569908],"samaccounttype":[805306368],"countrycode":[0],"objectguid":["SOMETHINGBASE64LIKE=="],"usnchanged":[52144153],"manager":["CN=The Name Of A Person,OU=Department Name,OU=City,OU=GroupName ,DC=Domain,DC=com"],"whenchanged":["2018-03-02T23:21:54"],"name":["First Name Last Name"],"objectsid":["SOMETHINGBASE64LIKE=="],"lastlogoff":[0],"lockouttime":[0],"badpasswordtime":[131647632246625185],"instancetype":[4],"primarygroupid":[513],"objectcategory":["CN=Person,CN=Schema,CN=Configuration,DC=Domain,DC=com"],"logoncount":[1073],"useraccountcontrol":[512],"description":["Some text"],"dscorepropagationdata":["1601-01-01T00:00:00"],"distinguishedname":["CN=First Name Last Name,OU=Department Name,OU=City,OU=GroupName ,DC=Domain,DC=com"],"objectclass":["top","person","organizationalPerson","user"],"adspath":["LDAP://Server/CN=First Name Last Name,OU=Department Name,OU=City,OU=GroupName ,DC=Domain,DC=com"],"usncreated":[39705915],"lastlogontimestamp":[131643676396776065],"userprincipalname":["User.Name@Domain.com"],"employeeid":["99999"],"accountexpires":[9223372036854775807],"department":["DepartmentName"],"codepage":[0],"sn":["Last Name"]}

/* value of properties, the string I concatenated */
"givenname": [{"type": "String", "value"; "First Name"}],
"samaccountname": [{"type": "String", "value"; "User.Name"}],
"cn": [{"type": "String", "value"; "First Name Last name"}],
"pwdlastset": [{"type": "Int64", "value"; "131641282827115142"}],
"whencreated": [{"type": "DateTime", "value"; "12/10/2017 10:16:43 p. m."}],
"badpwdcount": [{"type": "Int32", "value"; "0"}],
"displayname": [{"type": "String", "value"; "First Name Last name"}],
"lastlogon": [{"type": "Int64", "value"; "131648243091569908"}],
"samaccounttype": [{"type": "Int32", "value"; "805306368"}],
"countrycode": [{"type": "Int32", "value"; "0"}],
"objectguid": [{"type": "Byte[]", "value"; "System.Byte[]"}],
"usnchanged": [{"type": "Int64", "value"; "52144153"}],
"manager": [{"type": "String", "value"; "CN=Some Person Name,OU=Department name,OU=City,OU=Group Name,DC=Domain,DC=com"}],
"whenchanged": [{"type": "DateTime", "value"; "2/3/2018 11:21:54 p. m."}],
"name": [{"type": "String", "value"; "First Name Last name"}],
"objectsid": [{"type": "Byte[]", "value"; "System.Byte[]"}],
"lastlogoff": [{"type": "Int64", "value"; "0"}],
"lockouttime": [{"type": "Int64", "value"; "0"}],
"badpasswordtime": [{"type": "Int64", "value"; "131647632246625185"}],
"instancetype": [{"type": "Int32", "value"; "4"}],
"primarygroupid": [{"type": "Int32", "value"; "513"}],
"objectcategory": [{"type": "String", "value"; "CN=Person,CN=Schema,CN=Configuration,DC=Domain,DC=com"}],
"logoncount": [{"type": "Int32", "value"; "1073"}],
"useraccountcontrol": [{"type": "Int32", "value"; "512"}],
"description": [{"type": "String", "value"; "13065, PROGRAMADOR SENIOR"}],
"dscorepropagationdata": [{"type": "DateTime", "value"; "1/1/1601 12:00:00 a. m."}],
"distinguishedname": [{"type": "String", "value"; "CN=First Name Last name,OU=Department name,OU=City,OU=Group Name,DC=Domain,DC=com"}],
"objectclass": [{"type": "String", "value"; "top"},{"type": "String", "value"; "person"},{"type": "String", "value"; "organizationalPerson"},{"type": "String", "value"; "user"}],
"adspath": [{"type": "String", "value"; "LDAP://SERVERNAME/CN=First Name Last name,OU=Department name,OU=City,OU=Group Name,DC=Domain,DC=com"}],
"usncreated": [{"type": "Int64", "value"; "39705915"}],
"lastlogontimestamp": [{"type": "Int64", "value"; "131643676396776065"}],
"userprincipalname": [{"type": "String", "value"; "User.Name@Domain.com"}],
"employeeid": [{"type": "String", "value"; "13065"}],
"accountexpires": [{"type": "Int64", "value"; "9223372036854775807"}],
"department": [{"type": "String", "value"; "IT"}],
"codepage": [{"type": "Int32", "value"; "0"}],
"sn": [{"type": "String", "value"; "Last name"}]


1 commentaires

Merci, j'ai essayé de trouver cette liste de propriétés.