/// <summary> /// Creates a dynamic record of the current reader row. /// </summary> protected virtual dynamic CreateDynamicRecord() { var obj = new ExpandoObject(); var dict = obj as IDictionary <string, object>; if (Reader.HeaderRecord != null) { for (var i = 0; i < Reader.HeaderRecord.Length; i++) { var args = new GetDynamicPropertyNameArgs(i, Reader.Context); var propertyName = Reader.Configuration.GetDynamicPropertyName(args); Reader.TryGetField(i, out string field); dict.Add(propertyName, field); } } else { for (var i = 0; i < Reader.Parser.Count; i++) { var args = new GetDynamicPropertyNameArgs(i, Reader.Context); var propertyName = Reader.Configuration.GetDynamicPropertyName(args); var field = Reader.GetField(i); dict.Add(propertyName, field); } } return(obj); }
/// <summary> /// Returns the header name ran through <see cref="PrepareHeaderForMatch(PrepareHeaderForMatchArgs)"/>. /// If no header exists, property names will be Field1, Field2, Field3, etc. /// </summary> /// <param name="args">The args.</param> public static string GetDynamicPropertyName(GetDynamicPropertyNameArgs args) { if (args.Context.Reader.HeaderRecord == null) { return($"Field{args.FieldIndex + 1}"); } var header = args.Context.Reader.HeaderRecord[args.FieldIndex]; header = args.Context.Reader.Configuration.PrepareHeaderForMatch(new PrepareHeaderForMatchArgs(header, args.FieldIndex)); return(header); }