// returns true for successfull parsing private static bool ParseConfigFile() { using (StreamReader reader = new StreamReader(_inputName)) { try { Dictionary <string, object> config = (Dictionary <string, object>)fastJSON.JSON.Instance.Parse(reader.ReadToEnd()); if (!config.ContainsKey("builditems")) { Console.WriteLine("Invalid Config file: missing key builditems"); return(false); } if (config.ContainsKey("assemblies")) { foreach (string assembly in (List <string>)config["assemblies"]) { _contentManager.AddAssembly(assembly); } } Dictionary <string, object> globalParameters = new Dictionary <string, object>(config); globalParameters.Remove("builditems"); globalParameters.Remove("assemblies"); int count = 1; foreach (Dictionary <string, object> item in ((List <object>)config["builditems"]).Cast <Dictionary <string, object> >()) { BuildItem buildItem = new BuildItem(); if (!item.ContainsKey("source")) { Console.WriteLine("Build Item {0} is missing the source parameter.", count); return(false); } buildItem.SourceFile = (string)item["source"]; if (!Path.IsPathRooted(buildItem.SourceFile)) { buildItem.SourceFile = Path.Combine(_baseDirectory, buildItem.SourceFile); } if (item.ContainsKey("destination")) { buildItem.DestinationFile = (string)item["destination"]; } if (item.ContainsKey("importer")) { List <object> list = (List <object>)item["importer"]; if (list.Count == 1) { if (list[0] is string) { buildItem.Importer = (string)list[0]; } else { buildItem.ImporterParameters = (Dictionary <string, object>)list[0]; } } else if (list[0] is string) { buildItem.Importer = (string)list[0]; buildItem.ImporterParameters = (Dictionary <string, object>)list[1]; } else { buildItem.Importer = (string)list[1]; buildItem.ImporterParameters = (Dictionary <string, object>)list[0]; } } if (item.ContainsKey("processor")) { List <object> list = (List <object>)item["processor"]; if (list.Count == 1) { if (list[0] is string) { buildItem.Processor = (string)list[0]; } else { buildItem.ProcessorParameters = (Dictionary <string, object>)list[0]; } } else if (list[0] is string) { buildItem.Processor = (string)list[0]; buildItem.ProcessorParameters = (Dictionary <string, object>)list[1]; } else { buildItem.Processor = (string)list[1]; buildItem.ProcessorParameters = (Dictionary <string, object>)list[0]; } } if (item.ContainsKey("exporter")) { List <object> list = (List <object>)item["exporter"]; if (list.Count == 1) { if (list[0] is string) { buildItem.Writer = (string)list[0]; } else { buildItem.WriterParameters = (Dictionary <string, object>)list[0]; } } else if (list[0] is string) { buildItem.Writer = (string)list[0]; buildItem.WriterParameters = (Dictionary <string, object>)list[1]; } else { buildItem.Writer = (string)list[1]; buildItem.WriterParameters = (Dictionary <string, object>)list[0]; } } Dictionary <string, object> parameters = new Dictionary <string, object>(item); parameters.Remove("importer"); parameters.Remove("processor"); parameters.Remove("exporter"); parameters.Remove("source"); parameters.Remove("destination"); (new[] { globalParameters, parameters }).SelectMany(x => x).ToList().ForEach(x => buildItem.GeneralParameters[x.Key] = x.Value); _buildItems.Add(buildItem); count++; } } catch (FileLoadException) { Console.WriteLine("Invalid config file."); return(false); } } return(true); }