private void AugmentArray( object obj, NestedTypeConfiguration ntc, object arr, APropertyInfo property, AArray nestedList, IReadOnlyState state, List <TypeConfiguration> tcs) { var asEnumerable = arr as IEnumerable; Debug.Assert(asEnumerable != null, "asEnumerable != null"); foreach (var item in asEnumerable) { var actual = item; if (property.TypeInfoWrapper.IsWrapper) { if (item is AugmenterWrapper wrapper) { actual = wrapper.Object; } } var dict = new AObject(); CopyAndAugmentObject(actual, tcs, dict, state, ntc, obj); nestedList.Add(dict); } }
private void AugmentArray( object obj, NestedTypeConfiguration ntc, object arr, APropertyInfo property, AArray nestedList, IReadOnlyState state, List <TypeConfiguration> typeConfigurations) { var asEnumerable = arr as IEnumerable; Debug.Assert(asEnumerable != null, "asEnumerable != null"); foreach (var item in asEnumerable) { var actual = item; if (property.TypeInfoWrapper.IsWrapper) { if (item is AugmenterWrapper wrapper) { actual = wrapper.Object; } } var dict = new AObject(); // ReSharper disable once ForCanBeConvertedToForeach for (var i = 0; i < typeConfigurations.Count; i++) { var tc = typeConfigurations[i]; var nestedState = CreateNestedState(obj, ntc, state); AugmentObject(actual, tc, dict, nestedState); } nestedList.Add(dict); } }
private static IReadOnlyState CreateNestedState(object obj, NestedTypeConfiguration ntc, IReadOnlyState state) { if (ntc?.AddState == null) { return(state); } var addedState = new State(); ntc.AddState(obj, state, addedState); var newState = new State(state, addedState); return(new ReadOnlyState(newState)); }
private void CopyAndAugmentObject(object obj, List <TypeConfiguration> typeConfigurations, AObject root, IReadOnlyState state, NestedTypeConfiguration ntc, object parentForNested) { foreach (var typeConfiguration in typeConfigurations) { if (ntc != null) { state = CreateNestedState(parentForNested, ntc, state); } CopyObject(obj, typeConfiguration, root, state); } foreach (var typeConfiguration in typeConfigurations) { if (ntc != null) { state = CreateNestedState(parentForNested, ntc, state); } AugmentObject(obj, typeConfiguration, root, state); } }