Exemple #1
0
        public override void VisitSequenceStart(IObjectDescriptor sequence, Type elementType, IEmitter context)
        {
            var anchor = aliasProvider.GetAlias(sequence.NonNullValue());

            eventEmitter.Emit(new SequenceStartEventInfo(sequence)
            {
                Anchor = anchor
            }, context);
        }
Exemple #2
0
        public override void VisitMappingStart(IObjectDescriptor mapping, Type keyType, Type valueType, IEmitter context)
        {
            var anchor = aliasProvider.GetAlias(mapping.NonNullValue());

            eventEmitter.Emit(new MappingStartEventInfo(mapping)
            {
                Anchor = anchor
            }, context);
        }
Exemple #3
0
        private void TraverseList <TContext>(IObjectDescriptor value, IObjectGraphVisitor <TContext> visitor, TContext context, Stack <ObjectPathSegment> path)
        {
            var enumerableType = ReflectionUtility.GetImplementedGenericInterface(value.Type, typeof(IEnumerable <>));
            var itemType       = enumerableType != null?enumerableType.GetGenericArguments()[0] : typeof(object);

            visitor.VisitSequenceStart(value, itemType, context);

            var index = 0;

            foreach (var item in (IEnumerable)value.NonNullValue())
            {
                Traverse(index, GetObjectDescriptor(item, itemType), visitor, context, path);
                ++index;
            }

            visitor.VisitSequenceEnd(value, context);
        }
Exemple #4
0
        protected virtual void TraverseProperties <TContext>(IObjectDescriptor value, IObjectGraphVisitor <TContext> visitor, TContext context, Stack <ObjectPathSegment> path)
        {
            visitor.VisitMappingStart(value, typeof(string), typeof(object), context);

            var source = value.NonNullValue();

            foreach (var propertyDescriptor in typeDescriptor.GetProperties(value.Type, source))
            {
                var propertyValue = propertyDescriptor.Read(source);

                if (visitor.EnterMapping(propertyDescriptor, propertyValue, context))
                {
                    Traverse(propertyDescriptor.Name, new ObjectDescriptor(propertyDescriptor.Name, typeof(string), typeof(string)), visitor, context, path);
                    Traverse(propertyDescriptor.Name, propertyValue, visitor, context, path);
                }
            }

            visitor.VisitMappingEnd(value, context);
        }
Exemple #5
0
        protected virtual void TraverseDictionary <TContext>(IObjectDescriptor dictionary, IObjectGraphVisitor <TContext> visitor, Type keyType, Type valueType, TContext context, Stack <ObjectPathSegment> path)
        {
            visitor.VisitMappingStart(dictionary, keyType, valueType, context);

            var isDynamic = dictionary.Type.FullName !.Equals("System.Dynamic.ExpandoObject");

            foreach (DictionaryEntry?entry in (IDictionary)dictionary.NonNullValue())
            {
                var entryValue = entry !.Value;
                var keyValue   = isDynamic ? namingConvention.Apply(entryValue.Key.ToString() !) : entryValue.Key;
                var key        = GetObjectDescriptor(keyValue, keyType);
                var value      = GetObjectDescriptor(entryValue.Value, valueType);

                if (visitor.EnterMapping(key, value, context))
                {
                    Traverse(keyValue, key, visitor, context, path);
                    Traverse(keyValue, value, visitor, context, path);
                }
            }

            visitor.VisitMappingEnd(dictionary, context);
        }
Exemple #6
0
        protected virtual void TraverseDictionary <TContext>(IObjectDescriptor dictionary, IObjectGraphVisitor <TContext> visitor, Type keyType, Type valueType, TContext context, Stack <ObjectPathSegment> path)
        {
            visitor.VisitMappingStart(dictionary, keyType, valueType, context);

            var isDynamic = dictionary.Type.FullName !.Equals("System.Dynamic.ExpandoObject");

#pragma warning disable CS8605 // Unboxing a possibly null value. Iterating IDictionary should not return nulls.
            foreach (DictionaryEntry entry in (IDictionary)dictionary.NonNullValue())
#pragma warning restore CS8605 // Unboxing a possibly null value.
            {
                var keyValue = isDynamic ? namingConvention.Apply(entry.Key.ToString() !) : entry.Key;
                var key      = GetObjectDescriptor(keyValue, keyType);
                var value    = GetObjectDescriptor(entry.Value, valueType);

                if (visitor.EnterMapping(key, value, context))
                {
                    var keyAsString = TypeConverter.ChangeType <string>(key);
                    Traverse(keyValue, key, visitor, context, path);
                    Traverse(keyValue, value, visitor, context, path);
                }
            }

            visitor.VisitMappingEnd(dictionary, context);
        }