示例#1
0
        private static void FeedProperty(object model, PropertyInfo prop, int depth)
        {
            // Récupération du type de la proriété (soit son type direct, soit son type défini dans la propriété "Type" de l'annotation PropertyJsonApi
            Type typeprop = AttributeHandling.GetTypeProperty(prop);

            // Si on est autorisé en écriture (si ce n'est pas une readonly)
            if (prop.CanWrite)
            {
                // La liste ayant un traitement spécifique, on va vérifier qu'il s'agit d'une liste et récupérer immédiatement son type
                Type listType = null;
                if (prop.PropertyType.GetGenericArguments().Length > 0)
                {
                    listType = prop.PropertyType.GetGenericArguments()[0];
                }

                //Cas de la génération d'une propriété simple
                // /!\ les listes sont des types systèmes. Ainsi les List<Interface> auraient pue passerer dans ce test
                if (Utils.IsTypeSystem(typeprop) && (listType == null || !listType.IsInterface))
                {
                    prop.SetValue(model, Feed(typeprop, depth + 1));
                }

                // Si on traite une interface, une classe ou un liste d'interface, alors on passera par la génération de modèle
                else if (typeprop.IsInterface || typeprop.IsClass || (listType != null && listType.IsInterface))
                {
                    FeedPropertyObject(model, prop, depth);
                }
            }
        }
示例#2
0
        private static bool IsSameType(PropertyInfo prop, Type outputType)
        {
            Type inType   = prop.PropertyType;
            Type typeprop = AttributeHandling.GetTypeProperty(prop);

            if (prop.PropertyType.GetGenericArguments().Length > 0)
            {
                inType   = prop.PropertyType.GetGenericArguments()[0];
                typeprop = AttributeHandling.GetTypeProperty(prop).GetGenericArguments()[0];
            }

            return((inType == outputType) || (typeprop == outputType));
        }
示例#3
0
        private static void FeedPropertyObject(object modelToBind, PropertyInfo relationship, int depth)
        {
            // Récupération du type de la propriété
            Type typeRelationship = AttributeHandling.GetTypeProperty(relationship);
            // Génération d'une instance de ce type
            object tempObj = Activator.CreateInstance(typeRelationship);

            // Génération d'une liste de modèle
            if (Utils.IsEnum(tempObj))
            {
                //--------Cas particulier------//
                //Type spécifié
                Type sendedType = typeRelationship.GetGenericArguments()[0];
                //Type attendu
                Type waitingType = relationship.PropertyType.GetGenericArguments()[0];
                //Instanciation particulière lorsque le type attendu dans le BO est une List<Interface>
                if (waitingType.GetTypeInfo().IsInterface)
                {
                    tempObj = Activator.CreateInstance(typeof(List <>).MakeGenericType(waitingType));
                }
                //---------------------------//

                BindList(sendedType, tempObj, depth);
            }
            // Génération d'un modèle simple
            else
            {
                BindModel(typeRelationship, tempObj, depth);
            }

            try
            {
                relationship.SetValue(modelToBind, tempObj);
            }
            catch (Exception)
            {
                //On ne bloque pas
            }
        }