/// <summary> /// Reads the properties from the <param name="instance"></param>. /// </summary> /// <param name="objDescriptor">The object descriptor.</param> /// <param name="instance">The instance.</param> /// <param name="instanceType">Type of the instance.</param> /// <param name="readFlags">The read flags.</param> private void ReadProperties(ObjectDescriptor objDescriptor, object instance, Type instanceType, BindingFlags readFlags) { var propertyDescriptorQuery = instanceType.GetProperties(readFlags) .Where(p => p.CanWrite && p.IsAutoProperty() && ShouldInclude(p.Name)) .Select(p => { var propertyValue = p.GetValue(instance); var descriptor = ParseDescriptor(propertyValue, p.Name, p.PropertyType); return(descriptor); }); foreach (var descriptor in propertyDescriptorQuery) { objDescriptor.AddProperty(descriptor); } }
/// <summary> /// each derived class will handle the <see cref="XElement" /> according to it's logic. /// </summary> /// <param name="element">The element.</param> /// <param name="chain">The chain.</param> /// <returns></returns> protected override BaseDescriptor HandleInternal(XElement element, DescriptorRecreationChain chain) { var nameAttr = element.Attribute("name"); var typeAttr = element.Attribute("type"); var idAttr = element.Attribute("id"); var objDescriptor = new ObjectDescriptor(nameAttr.Value, typeAttr.Value, idAttr.Value); var fields = GetDescriptors(element, "fields", chain); foreach (var fieldDesciptor in fields) { objDescriptor.AddField(fieldDesciptor); } var properties = GetDescriptors(element, "properties", chain); foreach (var propDescriptor in properties) { objDescriptor.AddProperty(propDescriptor); } return(objDescriptor); }