Ejemplo n.º 1
0
 // Methods
 public static void AddMap(Type objType, PropertyMap map)
 {
     PropertyMapCollection maps = null;
     if (!s_maps.TryGetValue(objType, out maps))
     {
         lock (s_SyncObj)
         {
             if (!s_maps.TryGetValue(objType, out maps))
             {
                 maps = new PropertyMapCollection();
                 if (!maps.Contains(map.Key))
                 {
                     maps.Add(map);
                 }
                 s_maps.Add(objType, maps);
             }
         }
     }
     else if (!maps.Contains(map.Key))
     {
         lock (s_SyncObj)
         {
             if (!maps.Contains(map.Key))
             {
                 maps.Add(map);
             }
         }
     }
 }
Ejemplo n.º 2
0
        public static PropertyMapCollection BuildPropertyMaps(Type objType)
        {
            PropertyInfo[] propertyInfos = objType.GetProperties();
            //added by Pluto Mei. 2014-1-6
            //to support field in map
            if (propertyInfos.Length > 0)
            {
                foreach (PropertyInfo propertyInfo in propertyInfos)
                {
                    string propertyName = propertyInfo.Name;
                    Type propertyType = propertyInfo.PropertyType;

                    PropertyMap map = new PropertyMap(propertyName, propertyInfo);
                    PropertyMapCache.AddMap(objType, map);
                    if (!propertyType.HasElementType && IsComplexType(propertyType))
                    {
                        List<string> parentNames = new List<string> {
                        propertyName
                    };
                        BuildSubPropertyMaps(objType, parentNames, propertyType);
                    }
                }
            }
            else
            {
                foreach (FieldInfo fieldInfo in objType.GetFields())
                {
                    //add by Pluto Mei.2014-1-6
                    //TODO: need reflect to support field
                    //old design is strong bind with propertyType
                    //to support field will cost many workload,so delay it.
                }
            }
            return PropertyMapCache.GetMaps(objType);
        }
Ejemplo n.º 3
0
        public static void BuildSubPropertyMaps(Type rootType, List<string> parentNames, Type propertyType)
        {
            PropertyInfo[] propertyInfos = propertyType.GetProperties();
            foreach (PropertyInfo propertyInfo in propertyInfos)
            {
                string subPropertyName = propertyInfo.Name;
                Type subPropertyType = propertyInfo.PropertyType;

                PropertyMap map = new PropertyMap(BuildMapKey(parentNames, subPropertyName), propertyInfo);
                PropertyMapCache.AddMap(rootType, map);
                if (!propertyType.HasElementType && IsComplexType(subPropertyType))
                {
                    parentNames.Add(subPropertyName);
                    BuildSubPropertyMaps(rootType, parentNames, subPropertyType);
                    parentNames.Remove(subPropertyName);
                }
            }
        }