public SiteSettingsPropertyValue(SiteSettingsProperty settings)
 {
     Settings = settings;
 }
 public SiteSettingsPropertyValue(SiteSettingsProperty settings, object value)
     : this(settings)
 {
     this.value = value;
 }
 private static string ConvertToString(SiteSettingsProperty property, object value)
 {
     return value == null ? String.Empty : value.ToString();
 }
        private static object ConvertFromBinary(SiteSettingsProperty property, byte[] data)
        {
            switch (Type.GetTypeCode(property.PropertyType))
            {
                case TypeCode.Empty:
                    return null;

                case TypeCode.Boolean:
                    return BitConverter.ToBoolean(data, 0);

                case TypeCode.SByte:
                    return (sbyte)BitConverter.ToChar(data, 0);

                case TypeCode.Char:
                    return BitConverter.ToChar(data, 0);

                case TypeCode.Byte:
                    return (byte)BitConverter.ToChar(data, 0);

                case TypeCode.UInt16:
                    return BitConverter.ToUInt16(data, 0);

                case TypeCode.UInt32:
                    return BitConverter.ToUInt32(data, 0);

                case TypeCode.Int32:
                    return BitConverter.ToInt32(data, 0);

                case TypeCode.UInt64:
                    return BitConverter.ToUInt64(data, 0);

                case TypeCode.Int64:
                    return BitConverter.ToInt64(data, 0);

                default:
                    throw new InvalidCastException();
            }
        }
        private static object ConvertFromXml(SiteSettingsProperty property, byte[] data)
        {
            using (var reader = new StreamReader(new MemoryStream(data)))
            {
                var serializer = new XmlSerializer(property.PropertyType);

                return serializer.Deserialize(reader);
            }
        }
        private static object ConvertFromString(SiteSettingsProperty property, byte[] data)
        {
            var str = Encoding.UTF8.GetString(data);

            if (typeof(string) == property.PropertyType)
            {
                return str;
            }

            var converter = TypeDescriptor.GetConverter(property.PropertyType);

            return converter.ConvertFromString(str);
        }
        private static object MaterializeValue(SiteSettingsProperty property, byte[] data)
        {
            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }

            switch (property.SerializeAs)
            {
                case SerializationType.String:
                    return ConvertFromString(property, data);

                case SerializationType.Xml:
                    return ConvertFromXml(property, data);

                case SerializationType.Binary:
                    return ConvertFromBinary(property, data);
            }

            throw new InvalidOperationException();
        }