We use TypeDescriptor to get the parent properties then PropertyDescriptor for each child property.
This will allow you to read all properties from ControlProperty and if they are complex you can read the nested properties by iterating through them.
//Top level properties
var propertyDescriptors = TypeDescriptor.GetProperties(ctrlType);
List<ControlProperty> childProps =
var propDesc = propertyDescriptors.Find(propData.Name,
var att = (PersistenceModeAttribute)propDesc.Attributes[
isInnerProperty = att !=
&& (att.Mode == PersistenceMode.InnerProperty || att.Mode == PersistenceMode.InnerDefaultProperty);
(isInnerProperty || propData.ListItems.Count() > 0)
You can also see ControlHelper which might do some job for you. There are some useful methods in ConrolManager class as well.
You can use a proxy object to serialize/deserialize or XML (creating XElement and adding XAttribute with the name and value of the property
propertyValue = property.GetValue(ctrltype);
The property object is sent on the client component (say a control and its designer) through GetScriptDescriptors() method overridden from AjaxDialogBas again using JavaScripSerializer and its Serialize method. Inside the method we pass IList of ControlProperty that is represent by WcfControlProperty ( responsible for transferring that data through WCF.)
the Telerik team
Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking
system and vote to affect the priority of the items