Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }