static TextWriter GetTextWriter(JsonOptions options) { if (options.OutputFile == null) { return(Console.Out); } else { return(new StreamWriter(options.OutputFile, false, Encoding.UTF8)); } }
static IEnumerable <Table> GetTables(JsonOptions options) { var connectionString = new ConnectionString(options.AccessFilePath, options.Password); using (var db = new DB(connectionString)) { var tableNames = options.Tables.Any() ? options.Tables : db.Tables.Select(t => t.Name); foreach (var tableName in tableNames) { var rows = db.GetTableData(tableName).ToArray(); yield return(new Table(tableName, rows)); } } }
static int GenerateJson(JsonOptions options) { var tables = GetTables(options); using (var writer = GetTextWriter(options)) using (var json = new JsonTextWriter(writer)) { if (options.PrettyPrint) { json.Formatting = Formatting.Indented; json.Indentation = 2; json.IndentChar = ' '; } json.WriteStartObject(); foreach (var table in tables) { var normalizedTableName = options.Normalized(table.Name); json.WritePropertyName(normalizedTableName); json.WriteStartArray(); foreach (var row in table.Rows) { json.WriteStartObject(); foreach (var field in row.Fields) { var normalizedFieldName = options.Normalized(field.Name); json.WritePropertyName(normalizedFieldName); json.WriteValue( options.KeepList.Any(x => x.Key.Equals(normalizedTableName) && x.Value.Equals(normalizedFieldName)) ? field.Value : options.CastNumber(field.Value) ); } json.WriteEndObject(); } json.WriteEndArray(); } json.WriteEndObject(); } return(0); }