合并图形api的两个结果

问题描述 投票:0回答:1

我正在使用Microsoft的Graph Api通过Intunes连接设备。我想合并托管设备和注册设备的结果。但是它们是两个不同的对象。如何将Microsoft.Graph.DirectoryObject类型的数组与Microsoft.Graph.ManagedDevice类型的对象合并?

public async Task<Array> GraphAsync() { 

            try
            {
                var graphClient = ClientFactory.GetGraphApiClient();


                var uniqueUserId = ClaimsHelper.GetUniqueUserIdFromClaims();

                var managedDevices = graphClient.Users[uniqueUserId].ManagedDevices;
                var registeredDevices = graphClient.Users[uniqueUserId].RegisteredDevices;

                var resultManaged = await managedDevices.Request().GetAsync();
                var resultRegistered = await registeredDevices.Request().GetAsync();


                 Microsoft.Graph.DirectoryObject [] devices = resultRegistered.ToArray();
                 Microsoft.Graph.ManagedDevice [] devicesToAdd = resultManaged.ToArray();

                 int array1OriginalLength = devices.Length;
                 Array.Resize<Microsoft.Graph.DirectoryObject>(ref devices, array1OriginalLength + devices.Length);
                 Array.Copy(devicesToAdd, 0, devices, array1OriginalLength, devicesToAdd.Length);


                return devices;

            }
            catch(Exception e)
            {
                throw new UnauthorizedException(e + "Error calling GraphClient.");
            }
        }
    }
c# arrays microsoft-graph
1个回答
0
投票

Microsoft.Graph.DirectoryObject和Microsoft.Graph.ManagedDevice都是不同的类型,因此无法将ManagedDevice类型的复制对象创建到DirectoryObject类型的数组中,反之亦然。两种类型都继承自类Microsoft.Graph.Entity。因此,您可以创建一个类型为Entity的新数组,并将两个数组的项目复制到新数组:

        DirectoryObject[] devices = new DirectoryObject[2];

        DirectoryObject directoryObject = new DirectoryObject();
        directoryObject.DeletedDateTime = DateTimeOffset.Now;

        devices[0] = directoryObject;

        ManagedDevice[] devicesToAdd = new ManagedDevice[2];

        ManagedDevice managedDevice = new ManagedDevice();

        devicesToAdd[0] = managedDevice;

        Entity[] entityArray = new Entity[devices.Length + devicesToAdd.Length];
        Array.Copy(devices, entityArray, devices.Length);
        Array.Copy(devicesToAdd, 0, entityArray, devices.Length, devicesToAdd.Length);

        foreach(var entity in entityArray)
        {
            if(entity is DirectoryObject)
            {
                var castedObject = (DirectoryObject)entity;

                var dateTime = castedObject.DeletedDateTime;
            }

            if(entity is ManagedDevice)
            {

            }
        }

请记住,由于类型更改属性或特定于DirectoryObjects或ManagedDevice的方法,因此不再可访问。您将需要回退到特定类型以使用它们,如foreach循环所示。因此,如果您打算使用类型特定的属性来避免转换,则最好让函数返回更复杂的类型,例如自定义类或两个数组的元组。

© www.soinside.com 2019 - 2024. All rights reserved.