private async void OnLoadCommand(object parameter) //This method is going to be changed
        {
            if (!Banners.LoadingBannerVisible)
            {
                ManagedBookmarks ParsedBookmarks = new ManagedBookmarks();
                Banners.ShowLoadingBanner("Loading JSON, please wait...");
                SerializeCommand.RaiseCanExecuteChanged();
                Info.LoadText   = "Loading JSON...";
                ParsedBookmarks = await ChromeJSONConverter.ParseJSON(Json.Code);

                Info.LoadText             = "Load";
                Banners.LoadingBannerText = "JSON Loaded";
                LoadTimer.Start();



                if (ParsedBookmarks.RootFolder.Name != "")
                {
                    ChromeBookmarks.RootFolder           = ParsedBookmarks.RootFolder;
                    ChromeBookmarks.CurrentWorkingFolder = ParsedBookmarks.RootFolder;
                    ChromeBookmarks.CurrentWorkingFolderContextMenuText = $"Rename '{ParsedBookmarks.RootFolder.Name}'";
                    ChromeBookmarks.CurrentWorkingFolderPath            = ParsedBookmarks.RootFolder.Name;
                }
            }
            else
            {
                Info.LoadText = "Please Wait...";
            }
        }
        // Async Methods to parse JSON code into a ManagedBookmarks object
        public static async Task <ManagedBookmarks> ParseJSON(string JSONCode)
        {
            ManagedBookmarks ReturnableManagedBookmarks = new ManagedBookmarks();

            await Task.Run(() =>
            {
                ReturnableManagedBookmarks = _ParseJSON(JSONCode);
            });

            return(ReturnableManagedBookmarks);
        }
        private static ManagedBookmarks _ParseJSON(string JSONCode)
        {
            ManagedBookmarks parsedBookmarks = new ManagedBookmarks();

            try
            {
                var managedBookmark = JsonConvert.DeserializeObject <List <ManagedBookmarkJsonModel> >(JSONCode);
                parsedBookmarks.RootFolder = CreateFoldersRecursively(managedBookmark, new Folder()
                {
                    FolderIndex = 0, Name = "root"
                });
            }
            catch (Exception ex) {
                Console.WriteLine(ex);
            }

            return(parsedBookmarks);
        }
        private void LoadTree()
        {
            Folder     tempFolder = new Folder();
            BannerData tempBI     = new BannerData();

            if (ChromeBookmarks == null)
            {
                ManagedBookmarks tempMB = new ManagedBookmarks();
                tempMB.RootFolder.Name = "Root Folder";

                tempMB.CurrentWorkingFolder = tempMB.RootFolder;

                ChromeBookmarks = tempMB;
            }

            Banners   = tempBI;
            NewFolder = tempFolder;

            UpdateWorkingPath();
        }
        private static ManagedBookmarks _ParseJSON(string JSONCode)
        {
            ManagedBookmarks ParsedBookmarks = new ManagedBookmarks();

            try
            {
                string StrippedJSONData = JSONCode.Replace("},{", "}|{");
                StrippedJSONData = StrippedJSONData.Replace("\",\"", "\"|\"");
                StrippedJSONData = StrippedJSONData.Replace("{", "");
                StrippedJSONData = StrippedJSONData.Replace("}", "");
                StrippedJSONData = StrippedJSONData.Replace("\"", "");
                StrippedJSONData = StrippedJSONData.Remove(0, 1);
                StrippedJSONData = StrippedJSONData.Remove(StrippedJSONData.Count() - 1, 1);

                List <string> JSONDataList = new List <string>();
                JSONDataList = StrippedJSONData.Split('|').ToList <string>();

                Folder WorkingFolder = new Folder();
                string lastName      = "";

                foreach (string data in JSONDataList)
                {
                    string[] CurrentData = data.Split(':');

                    switch (CurrentData[0])
                    {
                    case "toplevel_name":
                    {
                        ParsedBookmarks.RootFolder.Name        = CurrentData[1];
                        ParsedBookmarks.RootFolder.FolderIndex = 0;
                        WorkingFolder = ParsedBookmarks.RootFolder;
                        break;
                    }

                    case "children":
                    {
                        Folder newFolder = new Folder {
                            Name = lastName
                        };
                        newFolder.Parent      = WorkingFolder;
                        newFolder.FolderIndex = WorkingFolder.FolderIndex + 1;
                        WorkingFolder.folders.Add(newFolder);

                        if (data != "children:[]")
                        {
                            lastName      = data.Substring(10).Split(':')[1];
                            WorkingFolder = WorkingFolder.folders.Where(x => x == newFolder).FirstOrDefault();
                        }
                        break;
                    }

                    case "name":
                    {
                        lastName = CurrentData[1];
                        break;
                    }

                    case "url":
                    {
                        URL newURL = new URL {
                            Name = lastName, Url = String.Join(":", CurrentData)
                        };

                        bool FolderEnd = CurrentData[CurrentData.Count() - 1].EndsWith("]");
                        newURL.Url = newURL.Url.Remove(0, 4);

                        WorkingFolder.URLs.Add(newURL);

                        if (FolderEnd)
                        {
                            WorkingFolder = WorkingFolder.Parent;
                        }

                        break;
                    }
                    }
                }
            }
            catch (Exception ex) { }

            return(ParsedBookmarks);
        }