private Object ToValue(string strValue, FluxColumn column) { Arguments.CheckNotNull(column, "column"); // Default value if (string.IsNullOrEmpty(strValue)) { var defaultValue = column.DefaultValue; return(string.IsNullOrEmpty(defaultValue) ? null : ToValue(defaultValue, column)); } try { switch (column.DataType) { case "boolean": return(bool.TryParse(strValue, out var value) && value); case "unsignedLong": return(Convert.ToUInt64(strValue)); case "long": return(Convert.ToInt64(strValue)); case "double": return(Convert.ToDouble(strValue, CultureInfo.InvariantCulture)); case "base64Binary": return(Convert.FromBase64String(strValue)); case "dateTime:RFC3339": case "dateTime:RFC3339Nano": return(InstantPattern.ExtendedIso.Parse(strValue).Value); case "duration": return(Duration.FromNanoseconds(Convert.ToDouble(strValue))); default: return(strValue); } } catch (Exception) { throw new FluxCsvParserException("Unable to parse CSV response."); } }
private void AddDataTypes(FluxTable table, CsvReader dataTypes) { Arguments.CheckNotNull(table, "table"); Arguments.CheckNotNull(dataTypes, "dataTypes"); for (var index = 1; index < dataTypes.Context.Record.Length; index++) { var dataType = dataTypes[index]; if (string.IsNullOrEmpty(dataType)) { continue; } var columnDef = new FluxColumn { DataType = dataType, Index = index - 1 }; table.Columns.Add(columnDef); } }