public ChoAvroReader <T> WithFields(params string[] fieldsNames) { string fnTrim = null; if (!fieldsNames.IsNullOrEmpty()) { PropertyDescriptor pd = null; ChoAvroRecordFieldConfiguration fc = null; foreach (string fn in fieldsNames) { if (fn.IsNullOrEmpty()) { continue; } if (!_clearFields) { ClearFields(); Configuration.MapRecordFields(Configuration.RecordType); //Configuration.ColumnOrderStrict = true; } fnTrim = fn.NTrim(); if (Configuration.AvroRecordFieldConfigurations.Any(o => o.Name == fnTrim)) { fc = Configuration.AvroRecordFieldConfigurations.Where(o => o.Name == fnTrim).First(); Configuration.AvroRecordFieldConfigurations.Remove(Configuration.AvroRecordFieldConfigurations.Where(o => o.Name == fnTrim).First()); } else { pd = ChoTypeDescriptor.GetProperty(typeof(T), fn); } var nfc = new ChoAvroRecordFieldConfiguration(fnTrim) { FieldName = fn }; nfc.PropertyDescriptor = fc != null ? fc.PropertyDescriptor : pd; nfc.DeclaringMember = fc != null ? fc.DeclaringMember : null; if (pd != null) { if (nfc.FieldType == null) { nfc.FieldType = pd.PropertyType; } } Configuration.AvroRecordFieldConfigurations.Add(nfc); } } return(this); }
internal ChoAvroRecordFieldConfigurationMap(ChoAvroRecordFieldConfiguration config) { ChoGuard.ArgumentNotNull(config, nameof(config)); _config = config; }