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) { } } } }
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) { } } } }