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