public static void SetProperties()

in src/nms-api/Util/URISupport.cs [157:208]


        public static void SetProperties(object target, StringDictionary map, string prefix)
        {
            Type type = target.GetType();

            List<String> matches = new List<String>();

            foreach (string key in map.Keys)
            {
                if (key.StartsWith(prefix, StringComparison.InvariantCultureIgnoreCase))
                {
                    string bareKey = key.Substring(prefix.Length);
                    PropertyInfo prop = type.GetProperty(bareKey,
                        BindingFlags.FlattenHierarchy
                        | BindingFlags.Public
                        | BindingFlags.Instance
                        | BindingFlags.IgnoreCase);

                    if (null != prop)
                    {
                        prop.SetValue(target,
                            Convert.ChangeType(map[key], prop.PropertyType, CultureInfo.InvariantCulture), null);
                    }
                    else
                    {
                        FieldInfo field = type.GetField(bareKey,
                            BindingFlags.FlattenHierarchy
                            | BindingFlags.Public
                            | BindingFlags.Instance
                            | BindingFlags.IgnoreCase);
                        if (null != field)
                        {
                            field.SetValue(target,
                                Convert.ChangeType(map[key], field.FieldType, CultureInfo.InvariantCulture));
                        }
                        else
                        {
                            throw new NMSException(string.Format("No such property or field: {0} on class: {1}",
                                bareKey, target.GetType().Name));
                        }
                    }

                    // store for later removal.
                    matches.Add(key);
                }
            }

            // Remove all the properties we set so they are used again later.
            foreach (string match in matches)
            {
                map.Remove(match);
            }
        }