Exemplo n.º 1
0
 public void AssignXmlFields()
 {
     XmlTypeInfo = AssignXmlFieldsToEntityType(this.GetType());
 }
Exemplo n.º 2
0
        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);
        }