public override void VisitSequenceStart(IObjectDescriptor sequence, Type elementType, IEmitter context) { var anchor = aliasProvider.GetAlias(sequence.NonNullValue()); eventEmitter.Emit(new SequenceStartEventInfo(sequence) { Anchor = anchor }, context); }
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); }
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); }
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); }
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); }
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); }