示例#1
0
        public MethodMetadata MapToDeserialize(MethodMetadataBase metadata)
        {
            MethodMetadata methodMetadata = new MethodMetadata
            {
                Name      = metadata.Name,
                Extension = metadata.Extension
            };
            Type         type = metadata.GetType();
            PropertyInfo genericArgumentsProperty = type.GetProperty("GenericArguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            if (genericArgumentsProperty?.GetValue(metadata) != null)
            {
                List <TypeMetadataBase> genericArguments = (List <TypeMetadataBase>)ConvertionUtilities.ConvertList(typeof(TypeMetadataBase), (IList)genericArgumentsProperty?.GetValue(metadata));
                methodMetadata.GenericArguments = genericArguments.Select(g => TypeMetadataMapper.EmitTypeForDeserialization(g)).ToList();
            }
            methodMetadata.Modifiers = metadata.Modifiers;
            PropertyInfo parametersProperty = type.GetProperty("Parameters", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            if (parametersProperty?.GetValue(metadata) != null)
            {
                List <ParameterMetadataBase> parameters = (List <ParameterMetadataBase>)ConvertionUtilities.ConvertList(typeof(ParameterMetadataBase), (IList)parametersProperty?.GetValue(metadata));
                methodMetadata.Parameters = parameters.Select(p => new ParameterMetadataMapper().MapToDeserialize(p)).ToList();
            }
            PropertyInfo     returnTypeProperty = type.GetProperty("ReturnType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
            TypeMetadataBase returnType         = (TypeMetadataBase)returnTypeProperty?.GetValue(metadata);

            if (returnType != null)
            {
                methodMetadata.ReturnType = TypeMetadataMapper.EmitTypeForDeserialization(returnType);
            }
            return(methodMetadata);
        }
示例#2
0
        public MethodMetadataBase MapToSerialize(MethodMetadata model, Type methodMetadataType)
        {
            object       methodMetadata           = Activator.CreateInstance(methodMetadataType);
            PropertyInfo nameProperty             = methodMetadataType.GetProperty("Name");
            PropertyInfo extensionProperty        = methodMetadataType.GetProperty("Extension");
            PropertyInfo genericArgumentsProperty = methodMetadataType.GetProperty("GenericArguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
            PropertyInfo modifiersProperty        = methodMetadataType.GetProperty("Modifiers");
            PropertyInfo parametersProperty       = methodMetadataType.GetProperty("Parameters", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
            PropertyInfo returnTypeProperty       = methodMetadataType.GetProperty("ReturnType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            nameProperty?.SetValue(methodMetadata, model.Name);
            extensionProperty?.SetValue(methodMetadata, model.Extension);
            if (model.GenericArguments != null)
            {
                genericArgumentsProperty?.SetValue(methodMetadata, ConvertionUtilities.ConvertList(genericArgumentsProperty.PropertyType.GetGenericArguments()[0],
                                                                                                   model.GenericArguments.Select(t => TypeMetadataMapper.EmitTypeToSerialization(t, genericArgumentsProperty.PropertyType.GetGenericArguments()[0])).ToList()));
            }
            modifiersProperty?.SetValue(methodMetadata, model.Modifiers);
            if (model.Parameters != null)
            {
                parametersProperty?.SetValue(methodMetadata, ConvertionUtilities.ConvertList(parametersProperty.PropertyType.GetGenericArguments()[0],
                                                                                             model.Parameters.Select(p => new ParameterMetadataMapper().MapToSerialize(p, parametersProperty.PropertyType.GetGenericArguments()[0])).ToList()));
            }
            if (model.ReturnType != null)
            {
                returnTypeProperty?.SetValue(methodMetadata, returnTypeProperty.PropertyType.Cast(TypeMetadataMapper.EmitTypeToSerialization(model.ReturnType, returnTypeProperty.PropertyType)));
            }
            return((MethodMetadataBase)methodMetadata);
        }
        public NamespaceMetadataBase MapToSerialize(NamespaceMetadata metadata, Type namespaceMetadataType)
        {
            object       namespaceMetadata          = Activator.CreateInstance(namespaceMetadataType);
            PropertyInfo nameProperty               = namespaceMetadataType.GetProperty("NamespaceName");
            PropertyInfo namespaceMetadatasProperty = namespaceMetadataType.GetProperty("Types", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            nameProperty?.SetValue(namespaceMetadata, metadata.NamespaceName);
            namespaceMetadatasProperty?.SetValue(namespaceMetadata, ConvertionUtilities.ConvertList(namespaceMetadatasProperty.PropertyType.GetGenericArguments()[0],
                                                                                                    metadata.Types.Select(t => new TypeMetadataMapper().MapToSerialize(t, namespaceMetadatasProperty.PropertyType.GetGenericArguments()[0])).ToList()));
            return((NamespaceMetadataBase)namespaceMetadata);
        }
示例#4
0
        public static AssemblyMetadata MapToDeserialize(AssemblyMetadataBase metadata)
        {
            AssemblyMetadata assemblyModel = new AssemblyMetadata();
            Type             type          = metadata.GetType();

            assemblyModel.Name = metadata.Name;
            PropertyInfo namespaceMetadatasProperty = type.GetProperty("Namespaces", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
            List <NamespaceMetadataBase> namespaces = (List <NamespaceMetadataBase>)ConvertionUtilities.ConvertList(typeof(NamespaceMetadataBase), (IList)namespaceMetadatasProperty?.GetValue(metadata));

            if (namespaces != null)
            {
                assemblyModel.Namespaces = namespaces.Select(n => new NamespaceMetadataMapper().MapToDeserialize(n)).ToList();
            }
            return(assemblyModel);
        }
        public NamespaceMetadata MapToDeserialize(NamespaceMetadataBase metadata)
        {
            NamespaceMetadata namespaceMetadata = new NamespaceMetadata
            {
                NamespaceName = metadata.NamespaceName
            };
            Type                    type          = metadata.GetType();
            PropertyInfo            typesProperty = type.GetProperty("Types", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
            List <TypeMetadataBase> types         = (List <TypeMetadataBase>)ConvertionUtilities.ConvertList(typeof(TypeMetadataBase), (IList)typesProperty?.GetValue(metadata));

            if (types != null)
            {
                namespaceMetadata.Types = types.Select(n => TypeMetadataMapper.EmitTypeForDeserialization(n)).ToList();
            }
            return(namespaceMetadata);
        }
示例#6
0
        private void FillTypeForSerialization(TypeMetadata metadata, TypeMetadataBase typeMetadata)
        {
            Type type = typeMetadata.GetType();

            type.GetProperty("TypeName")?.SetValue(typeMetadata, metadata.TypeName);
            type.GetProperty("AssemblyName")?.SetValue(typeMetadata, metadata.AssemblyName);
            type.GetProperty("TypeKind")?.SetValue(typeMetadata, metadata.TypeKind);
            type.GetProperty("IsExternal")?.SetValue(typeMetadata, metadata.IsExternal);
            type.GetProperty("IsGeneric")?.SetValue(typeMetadata, metadata.IsGeneric);
            type.GetProperty("Modifiers")?.SetValue(typeMetadata, metadata.Modifiers);

            if (metadata.BaseType != null)
            {
                type.GetProperty("BaseType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)
                ?.SetValue(typeMetadata, type.Cast(EmitTypeToSerialization(metadata.BaseType, type)));
            }

            if (metadata.DeclaringType != null)
            {
                type.GetProperty("DeclaringType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)
                ?.SetValue(typeMetadata, type.Cast(EmitTypeToSerialization(metadata.DeclaringType, type)));
            }

            if (metadata.NestedTypes != null)
            {
                PropertyInfo nestedTypesProperty = type.GetProperty("NestedTypes", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
                nestedTypesProperty?.SetValue(typeMetadata, ConvertionUtilities.ConvertList(type,
                                                                                            metadata.NestedTypes?.Select(c => EmitTypeToSerialization(c, type)).ToList()));
            }

            if (metadata.GenericArguments != null)
            {
                PropertyInfo genericArgumentsProperty = type.GetProperty("GenericArguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
                genericArgumentsProperty?.SetValue(typeMetadata, ConvertionUtilities.ConvertList(type,
                                                                                                 metadata.GenericArguments?.Select(c => EmitTypeToSerialization(c, type)).ToList()));
            }

            if (metadata.ImplementedInterfaces != null)
            {
                PropertyInfo implementedInterfacesProperty = type.GetProperty("ImplementedInterfaces", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
                implementedInterfacesProperty?.SetValue(typeMetadata, ConvertionUtilities.ConvertList(type,
                                                                                                      metadata.ImplementedInterfaces?.Select(c => EmitTypeToSerialization(c, type)).ToList()));
            }

            if (metadata.Fields != null)
            {
                PropertyInfo fieldsProperty = type.GetProperty("Fields", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
                fieldsProperty?.SetValue(typeMetadata, ConvertionUtilities.ConvertList(fieldsProperty.PropertyType.GetGenericArguments()[0],
                                                                                       metadata.Fields?.Select(c => new ParameterMetadataMapper().MapToSerialize(c, fieldsProperty?.PropertyType.GetGenericArguments()[0])).ToList()));
            }

            if (metadata.Methods != null)
            {
                PropertyInfo methodsProperty = type.GetProperty("Methods", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
                methodsProperty?.SetValue(typeMetadata, ConvertionUtilities.ConvertList(methodsProperty.PropertyType.GetGenericArguments()[0],
                                                                                        metadata.Methods?.Select(m => new MethodMetadataMapper().MapToSerialize(m, methodsProperty?.PropertyType.GetGenericArguments()[0])).ToList()));
            }

            if (metadata.Constructors != null)
            {
                PropertyInfo constructorsProperty = type.GetProperty("Constructors", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
                constructorsProperty?.SetValue(typeMetadata, ConvertionUtilities.ConvertList(constructorsProperty.PropertyType.GetGenericArguments()[0],
                                                                                             metadata.Constructors?.Select(c => new MethodMetadataMapper().MapToSerialize(c, constructorsProperty?.PropertyType.GetGenericArguments()[0])).ToList()));
            }

            if (metadata.Properties != null)
            {
                PropertyInfo propertiesProperty = type.GetProperty("Properties", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
                propertiesProperty?.SetValue(typeMetadata, ConvertionUtilities.ConvertList(propertiesProperty.PropertyType.GetGenericArguments()[0],
                                                                                           metadata.Properties?.Select(c => new PropertyMetadataMapper().MapToSerialize(c, propertiesProperty?.PropertyType.GetGenericArguments()[0])).ToList()));
            }
        }
示例#7
0
        private void FillTypeForDeserialization(TypeMetadataBase metadata, TypeMetadata typeMetadata)
        {
            typeMetadata.TypeName     = metadata.TypeName;
            typeMetadata.AssemblyName = metadata.AssemblyName;
            typeMetadata.TypeKind     = metadata.TypeKind;
            typeMetadata.IsExternal   = metadata.IsExternal;
            typeMetadata.IsGeneric    = metadata.IsGeneric;
            typeMetadata.Modifiers    = metadata.Modifiers;

            Type             type             = metadata.GetType();
            PropertyInfo     baseTypeProperty = type.GetProperty("BaseType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
            TypeMetadataBase baseType         = (TypeMetadataBase)baseTypeProperty?.GetValue(metadata);

            typeMetadata.BaseType = EmitTypeForDeserialization(baseType);

            PropertyInfo     declaringTypeProperty = type.GetProperty("DeclaringType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
            TypeMetadataBase declaringType         = (TypeMetadataBase)declaringTypeProperty?.GetValue(metadata);

            typeMetadata.DeclaringType = EmitTypeForDeserialization(declaringType);

            PropertyInfo nestedTypesProperty = type.GetProperty("NestedTypes", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            if (nestedTypesProperty?.GetValue(metadata) != null)
            {
                List <TypeMetadataBase> nestedTypes = (List <TypeMetadataBase>)ConvertionUtilities.ConvertList(typeof(TypeMetadataBase), (IList)nestedTypesProperty?.GetValue(metadata));
                typeMetadata.NestedTypes = nestedTypes?.Select(n => EmitTypeForDeserialization(n)).ToList();
            }

            PropertyInfo genericArgumentsProperty = type.GetProperty("GenericArguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            if (genericArgumentsProperty?.GetValue(metadata) != null)
            {
                List <TypeMetadataBase> genericArguments = (List <TypeMetadataBase>)ConvertionUtilities.ConvertList(typeof(TypeMetadataBase), (IList)genericArgumentsProperty?.GetValue(metadata));
                typeMetadata.GenericArguments = genericArguments?.Select(g => EmitTypeForDeserialization(g)).ToList();
            }

            PropertyInfo implementedInterfacesProperty = type.GetProperty("ImplementedInterfaces", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            if (implementedInterfacesProperty?.GetValue(metadata) != null)
            {
                List <TypeMetadataBase> implementedInterfaces = (List <TypeMetadataBase>)ConvertionUtilities.ConvertList(typeof(TypeMetadataBase), (IList)implementedInterfacesProperty?.GetValue(metadata));
                typeMetadata.ImplementedInterfaces = implementedInterfaces?.Select(i => EmitTypeForDeserialization(i)).ToList();
            }

            PropertyInfo fieldsProperty = type.GetProperty("Fields", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            if (fieldsProperty?.GetValue(metadata) != null)
            {
                List <ParameterMetadataBase> fields = (List <ParameterMetadataBase>)ConvertionUtilities.ConvertList(typeof(ParameterMetadataBase), (IList)fieldsProperty?.GetValue(metadata));
                typeMetadata.Fields = fields?.Select(c => new ParameterMetadataMapper().MapToDeserialize(c)).ToList();
            }

            PropertyInfo methodsProperty = type.GetProperty("Methods", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            if (methodsProperty?.GetValue(metadata) != null)
            {
                List <MethodMetadataBase> methods = (List <MethodMetadataBase>)ConvertionUtilities.ConvertList(typeof(MethodMetadataBase), (IList)methodsProperty?.GetValue(metadata));
                typeMetadata.Methods = methods?.Select(c => new MethodMetadataMapper().MapToDeserialize(c)).ToList();
            }

            PropertyInfo constructorsProperty = type.GetProperty("Constructors", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            if (constructorsProperty?.GetValue(metadata) != null)
            {
                List <MethodMetadataBase> constructors = (List <MethodMetadataBase>)ConvertionUtilities.ConvertList(typeof(MethodMetadataBase), (IList)constructorsProperty?.GetValue(metadata));
                typeMetadata.Constructors = constructors?.Select(c => new MethodMetadataMapper().MapToDeserialize(c)).ToList();
            }

            PropertyInfo propertiesProperty = type.GetProperty("Properties", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);

            if (propertiesProperty?.GetValue(metadata) != null)
            {
                List <PropertyMetadataBase> properties = (List <PropertyMetadataBase>)ConvertionUtilities.ConvertList(typeof(PropertyMetadataBase), (IList)propertiesProperty?.GetValue(metadata));
                typeMetadata.Properties = properties?.Select(g => new PropertyMetadataMapper().MapToDeserialize(g)).ToList();
            }
        }