/// <summary> /// Reads the fields 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 ReadFields(ObjectDescriptor objDescriptor, object instance, Type instanceType, BindingFlags readFlags) { var fieldDescriptorQuery = instanceType.GetFields(readFlags) .Where(f => !f.IsAutoBackingField() && ShouldInclude(f.Name)) .Select(f => { var fieldValue = f.GetValue(instance); var fieldDescriptor = ParseDescriptor(fieldValue, f.Name, f.FieldType); return(fieldDescriptor); }); foreach (var descriptor in fieldDescriptorQuery) { objDescriptor.AddField(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); }