Brew.Webforms.Widget.ParseOptions C# (CSharp) Method

ParseOptions() private method

private ParseOptions ( ) : object>>.List
return object>>.List
        private List<KeyValuePair<String, object>> ParseOptions()
        {
            var result = new List<KeyValuePair<String, object>>();
            var options = GetOptions();
            var type = this.GetType();
            var js = new JavaScriptSerializer();

            options.Add(new WidgetOption() { Name = "disabled", DefaultValue = false });

            foreach (var option in options) {
                var property = type.GetProperty(option);

                if (property == null) {
                    throw new ArgumentException("Brew Error: Widget has option defined with no matching property.", option.Name);
                }

                var value = property.GetValue(this);
                var allow = false;

                if (value == null && option.DefaultValue != null) {
                    allow = true;
                }
                else if (value != null && !value.Equals(option.DefaultValue)) {
                    if (value.GetType().IsArray && option.DefaultValue != null && option.DefaultValue.GetType().IsArray) {
                        var ienum = (IEnumerable<object>)value;
                        var oenum = (IEnumerable<object>)option.DefaultValue;
                        allow = !ienum.ItemsAreEqual(oenum);
                    }
                    else {
                        allow = true;
                    }
                }

                if (!allow) {
                    continue;
                }

                var outValue = value is String ? value : js.Serialize(value);
                var pair = new KeyValuePair<string, object>(option.Name, outValue);

                result.Add(pair);
            }

            return result;
        }