/// <inheritdoc /> public virtual void VisitCollection(IEnumerable collection, CollectionDescriptor descriptor) { var i = 0; // Make a copy in case VisitCollectionItem mutates something var items = collection.Cast <object>().ToList(); foreach (var item in items) { CurrentPath.Push(descriptor, i); VisitCollectionItem(collection, descriptor, i, item, TypeDescriptorFactory.Find(item?.GetType() ?? descriptor.ElementType)); CurrentPath.Pop(); i++; } }
/// <inheritdoc /> public virtual void VisitDictionary(object dictionary, DictionaryDescriptor descriptor) { // Make a copy in case VisitCollectionItem mutates something var items = descriptor.GetEnumerator(dictionary).ToList(); foreach (var keyValue in items) { var key = keyValue.Key; var keyDescriptor = TypeDescriptorFactory.Find(keyValue.Key?.GetType() ?? descriptor.KeyType); var value = keyValue.Value; var valueDescriptor = TypeDescriptorFactory.Find(keyValue.Value?.GetType() ?? descriptor.ValueType); CurrentPath.Push(descriptor, key); VisitDictionaryKeyValue(dictionary, descriptor, key, keyDescriptor, value, valueDescriptor); CurrentPath.Pop(); } }