public static TileMap Parse(string text) { var tileMap = new TileMap(); var rows = text.Split("\n".ToCharArray()).ToList(); while (rows.Count > 0 && !String.IsNullOrWhiteSpace(rows[0])) { if (rows [0].IndexOf("{") == -1) { var propName = rows [0].Substring(0, rows [0].IndexOf(":")).Trim(); var prop = ""; foreach (var part in propName.Split("_".ToCharArray())) { prop += part.Substring(0, 1).ToUpper() + part.Substring(1); } var value = rows [0].Substring(rows [0].IndexOf(":") + 1).Replace("\"", ""); tileMap.GetType().GetProperty(prop).SetValue(tileMap, value); rows.RemoveAt(0); } else { var propName = rows[0].Substring(0, rows[0].IndexOf("{")).Trim(); switch (propName) { case "layers": var layer = TileMapLayer.Parse(rows); tileMap.Layers.Add(layer); break; } } } return(tileMap); }