internal DataContractImplementor(EntityType ospaceEntityType)
        {
            _baseClrType = ospaceEntityType.ClrType;

            var attributes = (DataContractAttribute[])_baseClrType.GetCustomAttributes(typeof(DataContractAttribute), false);
            if (attributes.Length > 0)
            {
                _dataContract = attributes[0];
            }
        }
Example #2
0
        internal void ExportEnumContractType(DataContractAttribute attr, SerializationMap map)
        {
            Type type  = map.RuntimeType;
            var  qname = map.XmlName;
            var  st    = CreateSimpleType(qname, type);

            if (type.GetCustomAttribute <FlagsAttribute> (false) != null)
            {
                var list = new XmlSchemaSimpleTypeList();
                var sct  = new XmlSchemaSimpleType();
                sct.Content   = CreateEnumMembers(type, attr != null);
                list.ItemType = sct;
                st.Content    = list;
            }
            else
            {
                st.Content = CreateEnumMembers(type, attr != null);
            }
        }
Example #3
0
        internal void ExportStandardComplexType(DataContractAttribute attr, SerializationMap map, List <DataMemberInfo> members)
        {
            Type type  = map.RuntimeType;
            var  qname = map.XmlName;
            var  ct    = CreateComplexType(qname, type);

            if (type.BaseType != null && type.BaseType != typeof(object))
            {
                ExportCore(type.BaseType, false);
                var xcc = new XmlSchemaComplexContent();
                ct.ContentModel = xcc;
                var xcce = new XmlSchemaComplexContentExtension();
                xcc.Content       = xcce;
                xcce.BaseTypeName = GetSchemaTypeName(type.BaseType);
                xcce.Particle     = CreateMembersSequence(type, members, attr != null);
            }
            else
            {
                ct.Particle = CreateMembersSequence(type, members, attr != null);
            }
        }
        public static Type AddDataContractAttributeToType(Type type)
        {
            string typeName = "Derived_" + type.Name;

            // create a dynamic assembly and module
            AssemblyName assemblyName = new AssemblyName();
            assemblyName.Name = "tmpAssembly";
            AssemblyBuilder assemblyBuilder = System.Threading.Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
            ModuleBuilder module = assemblyBuilder.DefineDynamicModule("tmpModule");

            // create a new type builder
            TypeBuilder typeBuilder = module.DefineType(typeName, TypeAttributes.Public | TypeAttributes.Class
                | TypeAttributes.Class | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit | TypeAttributes.AutoLayout,
                null, new Type[] { typeof(IEntity) });

            {
                DataContractAttribute dca = new DataContractAttribute();
                ConstructorInfo ctor = typeof(DataContractAttribute).GetConstructor(new Type[] { });
                CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder(ctor, new object[] { },
                    new PropertyInfo[] { typeof(DataContractAttribute).GetProperty("Name") },
                    new object[] { typeName });
                typeBuilder.SetCustomAttribute(myCABuilder);
            }

            int idx = 0;
            // Loop over the attributes that will be used as the properties names in out new type
            foreach (PropertyInfo propertyInfo in type.GetProperties())
            {
                string propertyName = propertyInfo.Name;
                Type propertyType = propertyInfo.PropertyType;

                bool supportedType = false;

                if (propertyType.IsValueType)
                {
                    if (propertyType.IsEnum)
                    {
                        propertyType = propertyType.GetEnumUnderlyingType();
                    }
                    supportedType = true;
                }
                else if (propertyType == typeof(string))
                {
                    supportedType = true;
                }

                if (!supportedType)
                    continue;

                // Generate a private field
                FieldBuilder field = typeBuilder.DefineField("_" + propertyName, propertyType, FieldAttributes.Private);
                // Generate a public property
                PropertyBuilder property = typeBuilder.DefineProperty(propertyName, PropertyAttributes.HasDefault,
                    propertyType, null);

                // The property set and property get methods require a special set of attributes:
                MethodAttributes GetSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;

                // Define the "get" accessor method for current private field.
                MethodBuilder currGetPropMthdBldr = typeBuilder.DefineMethod("get_" + propertyName, GetSetAttr,
                                               propertyType, Type.EmptyTypes);

                // Intermediate Language stuff...
                ILGenerator currGetIL = currGetPropMthdBldr.GetILGenerator();
                currGetIL.Emit(OpCodes.Ldarg_0);
                currGetIL.Emit(OpCodes.Ldfld, field);
                currGetIL.Emit(OpCodes.Ret);

                // Define the "set" accessor method for current private field.
                MethodBuilder currSetPropMthdBldr = typeBuilder.DefineMethod("set_" + propertyName, GetSetAttr,
                                               null, new Type[] { propertyType });

                // Again some Intermediate Language stuff...
                ILGenerator currSetIL = currSetPropMthdBldr.GetILGenerator();
                currSetIL.Emit(OpCodes.Ldarg_0);
                currSetIL.Emit(OpCodes.Ldarg_1);
                currSetIL.Emit(OpCodes.Stfld, field);
                currSetIL.Emit(OpCodes.Ret);

                // Last, we must map the two methods created above to our PropertyBuilder to
                // their corresponding behaviors, "get" and "set" respectively.
                property.SetGetMethod(currGetPropMthdBldr);
                property.SetSetMethod(currSetPropMthdBldr);

                DataMemberAttribute dca = new DataMemberAttribute();
                ConstructorInfo ctor = typeof(DataMemberAttribute).GetConstructor(new Type[] { });
                CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder(ctor, new object[] { },
                    new PropertyInfo[] { typeof(DataMemberAttribute).GetProperty("Name"), typeof(DataMemberAttribute).GetProperty("Order") },
                    new object[] { propertyName, idx });
                property.SetCustomAttribute(myCABuilder);

                idx++;
            }

            // Generate our type
            Type generetedType = typeBuilder.CreateType();

            return generetedType;
        }
        public static Type GenerateTypeFromGridColumn(string gridName)
        {
            // create a dynamic assembly and module
            AssemblyName assemblyName = new AssemblyName();
            assemblyName.Name = "tmpAssembly";
            AssemblyBuilder assemblyBuilder = System.Threading.Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
            ModuleBuilder module = assemblyBuilder.DefineDynamicModule("tmpModule");

            // create a new type builder
            TypeBuilder typeBuilder = module.DefineType(gridName, TypeAttributes.Public | TypeAttributes.Class
                | TypeAttributes.Class | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit | TypeAttributes.AutoLayout,
                null, new Type[] { typeof(IEntity) });

            {
                DataContractAttribute dca = new DataContractAttribute();
                ConstructorInfo ctor = typeof(DataContractAttribute).GetConstructor(new Type[] { });
                CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder(ctor, new object[] { },
                    new PropertyInfo[] { typeof(DataContractAttribute).GetProperty("Name") },
                    new object[] { gridName });
                typeBuilder.SetCustomAttribute(myCABuilder);
            }

            int idx = 0;
            // Loop over the attributes that will be used as the properties names in out new type
            foreach (GridColumnInfo info in ADInfoBll.Instance.GetGridColumnInfos(gridName))
            {
                if (info.GridColumnType != GridColumnType.Normal
                    && info.GridColumnType != GridColumnType.ExpressionColumn)
                    continue;

                string propertyName = info.GridColumnName;

                Type propertyType = typeof(string);
                //Type propertyType = info.CreateType();
                //if (propertyType.IsEnum || propertyType.IsClass || info.CellViewerManager == "Combo")
                //{
                //    propertyType = typeof(string);
                //}

                //if (!propertyType.IsClass/* && Authority.AuthorizeByRule(info.NotNull)*/)
                //{
                //    propertyType = Utils.ReflectionHelper.CreateGenericType(typeof(Nullable<>), new Type[] { propertyType });
                //}

                // Generate a private field
                FieldBuilder field = typeBuilder.DefineField("_" + propertyName, propertyType, FieldAttributes.Private);
                // Generate a public property
                PropertyBuilder property = typeBuilder.DefineProperty(propertyName, PropertyAttributes.HasDefault,
                    propertyType, null);

                // The property set and property get methods require a special set of attributes:
                MethodAttributes GetSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;

                // Define the "get" accessor method for current private field.
                MethodBuilder currGetPropMthdBldr = typeBuilder.DefineMethod("get_" + propertyName, GetSetAttr,
                                               propertyType, Type.EmptyTypes);

                // Intermediate Language stuff...
                ILGenerator currGetIL = currGetPropMthdBldr.GetILGenerator();
                currGetIL.Emit(OpCodes.Ldarg_0);
                currGetIL.Emit(OpCodes.Ldfld, field);
                currGetIL.Emit(OpCodes.Ret);

                // Define the "set" accessor method for current private field.
                MethodBuilder currSetPropMthdBldr = typeBuilder.DefineMethod("set_" + propertyName, GetSetAttr,
                                               null, new Type[] { propertyType });

                // Again some Intermediate Language stuff...
                ILGenerator currSetIL = currSetPropMthdBldr.GetILGenerator();
                currSetIL.Emit(OpCodes.Ldarg_0);
                currSetIL.Emit(OpCodes.Ldarg_1);
                currSetIL.Emit(OpCodes.Stfld, field);
                currSetIL.Emit(OpCodes.Ret);

                // Last, we must map the two methods created above to our PropertyBuilder to
                // their corresponding behaviors, "get" and "set" respectively.
                property.SetGetMethod(currGetPropMthdBldr);
                property.SetSetMethod(currSetPropMthdBldr);

                DataMemberAttribute dca = new DataMemberAttribute();
                ConstructorInfo ctor = typeof(DataMemberAttribute).GetConstructor(new Type[] { });
                CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder(ctor, new object[] { },
                    new PropertyInfo[] { typeof(DataMemberAttribute).GetProperty("Name"), typeof(DataMemberAttribute).GetProperty("Order") },
                    new object[] { propertyName, idx });
                property.SetCustomAttribute(myCABuilder);

                idx++;
            }

            // Generate our type
            Type generetedType = typeBuilder.CreateType();

            return generetedType;
        }
Example #6
0
		static TypeMap CreateTypeMap (Type type, DataContractAttribute dca)
		{
			if (dca != null && dca.Name != null && IsInvalidNCName (dca.Name))
				throw new InvalidDataContractException (String.Format ("DataContractAttribute for type '{0}' has an invalid name", type));

			List<TypeMapMember> members = new List<TypeMapMember> ();

			foreach (FieldInfo fi in type.GetFields (binding_flags)) {
				if (fi.GetCustomAttributes (typeof (CompilerGeneratedAttribute), false).Length > 0)
					continue;
				if (dca != null) {
					object [] atts = fi.GetCustomAttributes (typeof (DataMemberAttribute), true);
					if (atts.Length == 0)
						continue;
					DataMemberAttribute dma = (DataMemberAttribute) atts [0];
					members.Add (new TypeMapField (fi, dma));
				} else {
					if (fi.GetCustomAttributes (typeof (IgnoreDataMemberAttribute), false).Length > 0)
						continue;
					members.Add (new TypeMapField (fi, null));
				}
			}

			if (dca != null) {
				foreach (PropertyInfo pi in type.GetProperties (binding_flags)) {
					object [] atts = pi.GetCustomAttributes (typeof (DataMemberAttribute), true);
					if (atts.Length == 0)
						continue;
					if (pi.GetIndexParameters ().Length > 0)
						continue;
					if (IsCollection (pi.PropertyType)) {
						if (!pi.CanRead)
							throw new InvalidDataContractException (String.Format ("Property {0} must have a getter", pi));
					}
					else if (!pi.CanRead || !pi.CanWrite)
						throw new InvalidDataContractException (String.Format ("Non-collection property {0} must have both getter and setter", pi));
					DataMemberAttribute dma = (DataMemberAttribute) atts [0];
					members.Add (new TypeMapProperty (pi, dma));
				}
			}

			members.Sort (delegate (TypeMapMember m1, TypeMapMember m2) { return m1.Order != m2.Order ? m1.Order - m2.Order : String.CompareOrdinal (m1.Name, m2.Name); });
			return new TypeMap (type, dca == null ? null : dca.Name, members.ToArray ());
		}
Example #7
0
		public void TestDataContractAttribute ()
		{
			DataContractAttribute x = new DataContractAttribute ();
			Assert.AreEqual (null, x.Name, "#01");
			Assert.AreEqual (null, x.Namespace, "#02");
		}
 private static XmlQualifiedName GetDCTypeStableName(Type type, DataContractAttribute dataContractAttribute)
 {
     string format = null;
     string dataContractNs = null;
     if (dataContractAttribute.IsNameSetExplicit)
     {
         format = dataContractAttribute.Name;
         if ((format == null) || (format.Length == 0))
         {
             throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(System.Runtime.Serialization.SR.GetString("InvalidDataContractName", new object[] { GetClrTypeFullName(type) })));
         }
         if (type.IsGenericType && !type.IsGenericTypeDefinition)
         {
             format = ExpandGenericParameters(format, type);
         }
         format = EncodeLocalName(format);
     }
     else
     {
         format = GetDefaultStableLocalName(type);
     }
     if (dataContractAttribute.IsNamespaceSetExplicit)
     {
         dataContractNs = dataContractAttribute.Namespace;
         if (dataContractNs == null)
         {
             throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(System.Runtime.Serialization.SR.GetString("InvalidDataContractNamespace", new object[] { GetClrTypeFullName(type) })));
         }
         CheckExplicitDataContractNamespaceUri(dataContractNs, type);
     }
     else
     {
         dataContractNs = GetDefaultDataContractNamespace(type);
     }
     return CreateQualifiedName(format, dataContractNs);
 }
 internal static bool TryGetDCAttribute(Type type, out DataContractAttribute dataContractAttribute)
 {
     dataContractAttribute = null;
     object[] customAttributes = type.GetCustomAttributes(Globals.TypeOfDataContractAttribute, false);
     if ((customAttributes != null) && (customAttributes.Length > 0))
     {
         dataContractAttribute = (DataContractAttribute) customAttributes[0];
     }
     return (dataContractAttribute != null);
 }
 internal DataContractImplementor(EntityType ospaceEntityType)
 {
     _baseClrType = ospaceEntityType.ClrType;
     _dataContract = _baseClrType.GetCustomAttributes<DataContractAttribute>(inherit: false).FirstOrDefault();
 }
Example #11
0
		internal void ExportStandardComplexType (DataContractAttribute attr, SerializationMap map, List<DataMemberInfo> members)
		{
			Type type = map.RuntimeType;
			var qname = map.XmlName;
			var ct = CreateComplexType (qname, type);

			if (type.BaseType != null && type.BaseType != typeof (object)) {
				ExportCore (type.BaseType, false);
				var xcc = new XmlSchemaComplexContent ();
				ct.ContentModel = xcc;
				var xcce = new XmlSchemaComplexContentExtension ();
				xcc.Content = xcce;
				xcce.BaseTypeName = GetSchemaTypeName (type.BaseType);
				xcce.Particle = CreateMembersSequence (type, members, attr != null);
			}
			else
				ct.Particle = CreateMembersSequence (type, members, attr != null);
		}
Example #12
0
		internal void ExportEnumContractType (DataContractAttribute attr, SerializationMap map)
		{
			Type type = map.RuntimeType;
			var qname = map.XmlName;
			var st = CreateSimpleType (qname, type);
			if (type.GetCustomAttribute<FlagsAttribute> (false) != null) {
				var list = new XmlSchemaSimpleTypeList ();
				var sct = new XmlSchemaSimpleType ();
				sct.Content = CreateEnumMembers (type, attr != null);
				list.ItemType = sct;
				st.Content = list;
			}
			else
				st.Content = CreateEnumMembers (type, attr != null);
		}