public virtual ObjectModelObject ConvertToObject()
        {
            var classAttr = GetObjectModelClassAttribute();

            if (classAttr == null)
            {
                return(null);
            }

            var answer = new ObjectModelObject(classAttr.Name);

            foreach (var propInfo in this.GetType().GetProperties())
            {
                var propAttr = GetObjectModelPropertyAttribute(propInfo);
                if (propAttr != null)
                {
                    object propVal = propInfo.GetValue(this);
                    if (!object.Equals(propAttr.DefaultValue, propVal))
                    {
                        IObjectModelValue value = CreateObject(propVal);

                        if (value != null)
                        {
                            answer.Add(propAttr.Name, value);
                        }
                    }
                }
                else
                {
                    var bindingPropAttr = GetObjectModelBindingPropertyAttribute(propInfo);
                    if (bindingPropAttr != null)
                    {
                        string bindingName = propInfo.GetValue(this) as string;
                        if (bindingName != null)
                        {
                            answer.AddBinding(bindingPropAttr, bindingName);
                        }
                    }
                }
            }

            return(answer);
        }
 public void Add(IObjectModelValue value)
 {
     Values.Add(value);
 }