public static IDictionary<string, object> ToDictionary(this TechTalk.SpecFlow.Table data) { var result = new Dictionary<string, object>(); if ( data.Header.Count == 2 && _acceptedHeaderFields.Any(a => a.Equals(data.Header.ElementAt(0), StringComparison.InvariantCultureIgnoreCase)) && data.Header.ElementAt(1).Equals("Value", StringComparison.InvariantCultureIgnoreCase)) { var propertyHeader = data.Header.ElementAt(0); var valueHeader = data.Header.ElementAt(1); foreach (var row in data.Rows) { var p = row[propertyHeader]; var v = TypeFactory.FromString(row[valueHeader]); result[p] = v; } } else if (data.Rows.Count > 1) { int i = 0; var keys = data.Header.Select(h => h).ToArray(); foreach (var row in data.Rows) { var table = new TechTalk.SpecFlow.Table(keys); table.AddRow(row); result.Add(i.ToString(CultureInfo.InvariantCulture), table.ToDictionary()); i++; } } else { var keys = data.Header.Select(h => h); var values = data.Rows[0]; foreach (var key in keys) { result[key] = TypeFactory.FromString(values[key]); } } return result; }