Exemplo n.º 1
0
 private static void AddArrayMetadata(Type type)
 {
     if (!array_metadata.ContainsKey(type))
     {
         ArrayMetadata value = default(ArrayMetadata);
         value.IsArray = type.IsArray;
         ITypeInfo typeInfo = TypeFactory.GetTypeInfo(type);
         if (typeInfo.GetInterface("System.Collections.IList") != null)
         {
             value.IsList = true;
         }
         foreach (PropertyInfo property in typeInfo.GetProperties())
         {
             if (!(property.Name != "Item"))
             {
                 ParameterInfo[] indexParameters = property.GetIndexParameters();
                 if (indexParameters.Length == 1 && indexParameters[0].ParameterType == typeof(int))
                 {
                     value.ElementType = property.PropertyType;
                 }
             }
         }
         lock (array_metadata_lock)
         {
             try
             {
                 array_metadata.Add(type, value);
             }
             catch (ArgumentException)
             {
             }
         }
     }
 }
Exemplo n.º 2
0
 private static void AddObjectMetadata(Type type)
 {
     if (!object_metadata.ContainsKey(type))
     {
         ObjectMetadata value    = default(ObjectMetadata);
         ITypeInfo      typeInfo = TypeFactory.GetTypeInfo(type);
         if (typeInfo.GetInterface("System.Collections.IDictionary") != null)
         {
             value.IsDictionary = true;
         }
         value.Properties = new Dictionary <string, PropertyMetadata>();
         foreach (PropertyInfo property in typeInfo.GetProperties())
         {
             if (property.Name == "Item")
             {
                 ParameterInfo[] indexParameters = property.GetIndexParameters();
                 if (indexParameters.Length == 1 && indexParameters[0].ParameterType == typeof(string))
                 {
                     value.ElementType = property.PropertyType;
                 }
             }
             else if (!value.IsDictionary || !dictionary_properties_to_ignore.Contains(property.Name))
             {
                 PropertyMetadata value2 = default(PropertyMetadata);
                 value2.Info = property;
                 value2.Type = property.PropertyType;
                 value.Properties.Add(property.Name, value2);
             }
         }
         foreach (FieldInfo field in typeInfo.GetFields())
         {
             PropertyMetadata value3 = default(PropertyMetadata);
             value3.Info    = field;
             value3.IsField = true;
             value3.Type    = field.FieldType;
             value.Properties.Add(field.Name, value3);
         }
         lock (object_metadata_lock)
         {
             try
             {
                 object_metadata.Add(type, value);
             }
             catch (ArgumentException)
             {
             }
         }
     }
 }