Example #1
0
            /// <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);
                }
            }
Example #2
0
            /// <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);
            }