private void TryGetSet(RegistryKey key, object obj, string keyName, RegistryValueKind valueKind) { object value = null; try { value = key.GetValue(keyName); } catch { } if (value != null) { try { var property = obj.GetType().GetProperty(keyName); if (property.PropertyType.IsEnum) { var enumValue = Enum.Parse(property.PropertyType, value.ToString()); obj.SetPropertyValue(keyName, enumValue); } else { switch (property.PropertyType.Name) { case "DateTime": switch (valueKind) { case RegistryValueKind.String: var date = DateTime.Parse(value.ToString()); obj.SetPropertyValue(keyName, date); break; default: DebugUtils.Break(); break; } break; case "String": switch (valueKind) { case RegistryValueKind.String: obj.SetPropertyValue(keyName, value.ToString()); break; default: DebugUtils.Break(); break; } break; case "Int32": { obj.SetPropertyValue(keyName, (int)value); break; } case "Boolean": { obj.SetPropertyValue(keyName, (int)value == 0 ? true : false); break; } default: DebugUtils.Break(); break; } } } catch (Exception ex) { DebugUtils.Break(); } } }
private void DoSave(RegistryKey key, object obj) { // public strings foreach (var property in obj.GetPublicPropertiesOfType <string>()) { var propertyValue = (string)property.GetValue(obj); var saveNull = true; if (property.HasCustomAttribute <RegistryPropertySaveAttribute>()) { var registryPropertySaveAttribute = property.GetCustomAttribute <RegistryPropertySaveAttribute>(); if (registryPropertySaveAttribute.SaveOptions == RegistryPropertySaveOptions.SaveNullValueAsEmpty) { saveNull = true; } } if (!propertyValue.IsNullWhiteSpaceOrEmpty() || saveNull) { if (obj is IRegistryKey) { if (property.Name != "KeyName") { key.SetValue(property.Name, propertyValue); } } else { key.SetValue(property.Name, propertyValue == null ? string.Empty : propertyValue); } } } // non strings foreach (var attributeProperty in obj.GetPublicPropertiesWithAttributeType <RegistryNonStringValueAttribute>()) { var attribute = attributeProperty.Key; var property = attributeProperty.Value; var value = property.GetValue(obj, null); var valueKind = attribute.ValueKind; switch (valueKind) { case RegistryValueKind.String: if (value != null) { key.SetValue(property.Name, value.ToString(), valueKind); } break; case RegistryValueKind.DWord: if (value != null) { switch (property.PropertyType.Name) { case "Boolean": key.SetValue(property.Name, (bool)value ? 1 : 0, valueKind); break; default: key.SetValue(property.Name, (int)value, valueKind); break; } } break; default: DebugUtils.Break(); break; } } // enumerables foreach (var attributeProperty in obj.GetPublicPropertiesWithAttributeType <RegistryKeyEnumerableAttribute>()) { var attribute = attributeProperty.Key; var property = attributeProperty.Value; var value = property.GetValue(obj, null); var subKey = key.CreateSubKey(attribute.KeyName); if (value is IRegistryKeyWithSubKeys) { DebugUtils.Break(); } else { var enumerable = (IEnumerable)value; var x = 1; foreach (var subValue in enumerable) { if (subValue is IRegistryKey) { var registryKeyObject = (IRegistryKey)subValue; if (registryKeyObject is IRegistryKeyWithSubKeys) { DebugUtils.Break(); } else { subKey = subKey.CreateSubKey(string.Format(registryKeyObject.KeyName, x)); } } if (attribute.SaveValueAsKey) { var valueString = subValue.ToString(); if (subKey.GetSubKeyNames().Any(n => n == valueString)) { subKey.DeleteSubKey(valueString); } subKey.CreateSubKey(valueString); } else { DoSave(subKey, subValue); } x++; } } } // public properties of type IRegistryKey foreach (var propertyValue in obj.GetPublicPropertyValuesOfType <IRegistryKey>()) { var value = propertyValue.Value; if (value is IRegistryKey) { var registryKeyObject = (IRegistryKey)value; if (registryKeyObject is IRegistryKeyWithSubKeys) { DebugUtils.Break(); } else { var subKey = key.CreateSubKey(registryKeyObject.KeyName); DoSave(subKey, registryKeyObject); } } } }
public static bool HasDynamicMember(this object obj, string name) { return(DebugUtils.BreakReturn <bool>(false)); }
public static void SetDynamicMember(this object obj, string name, object value) { DebugUtils.Break(); }
public static T GetDynamicMemberValue <T>(this object obj, string name) { return((T)DebugUtils.BreakReturnNull()); }