Esempio n. 1
0
        private static IList DecodeCollection(PSObject psObject, Type collectionType)
        {
            Type      genericArgument = collectionType.GetGenericArguments()[0];
            ArrayList baseObject      = RemoteHostEncoder.SafelyGetBaseObject <ArrayList>(psObject);
            IList     instance        = (IList)Activator.CreateInstance(collectionType);

            foreach (object obj in baseObject)
            {
                instance.Add(RemoteHostEncoder.DecodeObject(obj, genericArgument));
            }
            return(instance);
        }
Esempio n. 2
0
        private static object[] DecodeParameters(PSObject parametersPSObject, Type[] parameterTypes)
        {
            ArrayList     baseObject = (ArrayList)parametersPSObject.BaseObject;
            List <object> objectList = new List <object>();

            for (int index = 0; index < baseObject.Count; ++index)
            {
                object obj = baseObject[index] == null ? (object)null : RemoteHostEncoder.DecodeObject(baseObject[index], parameterTypes[index]);
                objectList.Add(obj);
            }
            return(objectList.ToArray());
        }
Esempio n. 3
0
        private static object[] DecodeParameters(PSObject parametersPSObject, Type[] parameterTypes)
        {
            ArrayList     baseObject = (ArrayList)parametersPSObject.BaseObject;
            List <object> list2      = new List <object>();

            for (int i = 0; i < baseObject.Count; i++)
            {
                object item = (baseObject[i] == null) ? null : RemoteHostEncoder.DecodeObject(baseObject[i], parameterTypes[i]);
                list2.Add(item);
            }
            return(list2.ToArray());
        }
Esempio n. 4
0
        /// <summary>
        /// Decode parameters.
        /// </summary>
        private static object[] DecodeParameters(PSObject parametersPSObject, Type[] parameterTypes)
        {
            // Extract the ArrayList and decode the parameters.
            ArrayList     parameters        = (ArrayList)parametersPSObject.BaseObject;
            List <object> decodedParameters = new List <object>();

            Dbg.Assert(parameters.Count == parameterTypes.Length, "Expected parameters.Count == parameterTypes.Length");
            for (int i = 0; i < parameters.Count; ++i)
            {
                object parameter = parameters[i] == null ? null : RemoteHostEncoder.DecodeObject(parameters[i], parameterTypes[i]);
                decodedParameters.Add(parameter);
            }

            return(decodedParameters.ToArray());
        }
Esempio n. 5
0
        private static object DecodeClassOrStruct(PSObject psObject, Type type)
        {
            object uninitializedObject = FormatterServices.GetUninitializedObject(type);

            foreach (PSPropertyInfo property in psObject.Properties)
            {
                FieldInfo field = type.GetField(property.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                if (property.Value == null)
                {
                    throw RemoteHostExceptions.NewDecodingFailedException();
                }
                field.SetValue(uninitializedObject, RemoteHostEncoder.DecodeObject(property.Value, field.FieldType) ?? throw RemoteHostExceptions.NewDecodingFailedException());
            }
            return(uninitializedObject);
        }
Esempio n. 6
0
        private static IDictionary DecodeDictionary(PSObject psObject, Type dictionaryType)
        {
            if (RemoteHostEncoder.IsObjectDictionaryType(dictionaryType))
            {
                return(RemoteHostEncoder.DecodeObjectDictionary(psObject, dictionaryType));
            }
            Type[]      genericArguments = dictionaryType.GetGenericArguments();
            Type        type1            = genericArguments[0];
            Type        type2            = genericArguments[1];
            Hashtable   baseObject       = RemoteHostEncoder.SafelyGetBaseObject <Hashtable>(psObject);
            IDictionary instance         = (IDictionary)Activator.CreateInstance(dictionaryType);

            foreach (object key in (IEnumerable)baseObject.Keys)
            {
                instance.Add(RemoteHostEncoder.DecodeObject(key, type1), RemoteHostEncoder.DecodeObject(baseObject[key], type2));
            }
            return(instance);
        }