Пример #1
0
            /// <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);
                }
            }
Пример #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);
            }