public void AssignXmlFields() { XmlTypeInfo = AssignXmlFieldsToEntityType(this.GetType()); }
private static EntityXmlTypeInfo AssignXmlFieldsToEntityType(Type t) { EntityXmlTypeInfo XmlTypeInfo = null; if (!EntityXmlAttributeNameIfcAttributeDict.ContainsKey(t)) { XmlTypeInfo = new EntityXmlTypeInfo(); EntityXmlAttributeNameIfcAttributeDict.Add(t, XmlTypeInfo); foreach (FieldInfo field in t.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy)) { foreach (Attribute attr in field.GetCustomAttributes(true)) // TYPE, ENUM, NULLABLE ENUM { string FieldName = field.Name; if (FieldName.StartsWith("_")) { FieldName = FieldName.Substring(1); } if (attr is ifcAttribute) { if (field.FieldType.IsSubclassOf(typeof(TypeBase))) { XmlTypeInfo.XmlAttributeNameIfcTypeAttributeDict.Add(FieldName, field); } else if (field.FieldType.IsSubclassOf(typeof(Enum))) { XmlTypeInfo.XmlAttributeNameIfcEnumAttributeDict.Add(FieldName, field); } else if ((Nullable.GetUnderlyingType(field.FieldType) != null) && (Nullable.GetUnderlyingType(field.FieldType).IsSubclassOf(typeof(Enum)))) { XmlTypeInfo.XmlAttributeNameIfcNEnmAttributeDict.Add(FieldName, field); } else if (field.FieldType.IsSubclassOf(typeof(SELECT))) { XmlTypeInfo.XmlElementNameIfcSelectAttributeDict.Add(FieldName, field); } else if (field.FieldType.IsSubclassOf(typeof(ENTITY))) { XmlTypeInfo.XmlElementNameIfcEntityAttributeDict.Add(FieldName, field); } else if (typeof(ifcListInterface).IsAssignableFrom(field.FieldType)) { XmlTypeInfo.XmlElementNameIfcListAttributeDict.Add(FieldName, field); } } if (attr is ifcInverseAttribute) { if (typeof(ifcListInterface).IsAssignableFrom(field.FieldType)) { XmlTypeInfo.XmlElementNameIfcInverseEntityListDict.Add(FieldName, field); } else { XmlTypeInfo.XmlElementNameIfcInverseEntityDict.Add(FieldName, field); } } } } // ggf. mit vorangesteltem Ifc (nur bei Instanzen!) } else { XmlTypeInfo = EntityXmlAttributeNameIfcAttributeDict[t]; } return(XmlTypeInfo); }