internal DataContractImplementor(EntityType ospaceEntityType) { _baseClrType = ospaceEntityType.ClrType; var attributes = (DataContractAttribute[])_baseClrType.GetCustomAttributes(typeof(DataContractAttribute), false); if (attributes.Length > 0) { _dataContract = attributes[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); } }
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; }
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 ()); }
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(); }
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); }
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); }