private static void ReadXmlWriteJson(string inputPath, string outputPath) { var doc = XDocument.Load(inputPath); var array = new JsonArray(); foreach (var tableDefinition in doc.Descendants(TableDefinition)) { var tupleType = tableDefinition.Attribute(Name).Value; var fields = new JsonArray(); foreach (var columnDefinition in tableDefinition.Elements(ColumnDefinition)) { var fieldName = columnDefinition.Attribute(Name).Value; var type = columnDefinition.Attribute(Type).Value; if (type == "localized") { type = "string"; } else if (type == "object") { type = "path"; } var field = new JsonObject { { fieldName, type } }; fields.Add(field); } var obj = new JsonObject { { tupleType, fields } }; array.Add(obj); } array.Sort(CompareTupleDefinitions); var strat = new PocoJsonSerializerStrategy(); var json = SimpleJson.SimpleJson.SerializeObject(array, strat); Directory.CreateDirectory(Path.GetDirectoryName(outputPath)); File.WriteAllText(outputPath, json); }
private static void ReadXmlWriteJson(string inputPath, string outputPath, string csOutputPath, string prefix) { var tableDefinitions = ReadXmlWriteCs(inputPath, csOutputPath, prefix); var array = new JsonArray(); foreach (var tableDefinition in tableDefinitions) { if (tableDefinition.Symbolless) { continue; } var symbolType = tableDefinition.SymbolDefinitionName; var fields = new JsonArray(); var firstField = true; foreach (var columnDefinition in tableDefinition.Columns) { if (firstField) { firstField = false; if (tableDefinition.SymbolIdIsPrimaryKey) { continue; } } var fieldName = columnDefinition.Name; fieldName = Regex.Replace(fieldName, "^([^_]+)_([^_]*)$", x => { return($"{x.Groups[2].Value}{x.Groups[1].Value}Ref"); }); var type = columnDefinition.Type.ToString().ToLower(); if (type == "localized") { type = "string"; } else if (type == "object") { type = "path"; } else if (columnDefinition.Type == ColumnType.Number && columnDefinition.Length == 2 && columnDefinition.MinValue == 0 && columnDefinition.MaxValue == 1) { type = "bool"; } if (columnDefinition.Type == ColumnType.Number && columnDefinition.Nullable) { type += "?"; } var field = new JsonObject { { fieldName, type } }; fields.Add(field); } var obj = new JsonObject { { symbolType, fields } }; array.Add(obj); } array.Sort(CompareSymbolDefinitions); var strat = new PocoJsonSerializerStrategy(); var json = SimpleJson.SimpleJson.SerializeObject(array, strat); Directory.CreateDirectory(Path.GetDirectoryName(outputPath)); File.WriteAllText(outputPath, json); }