public Task SerializeAsync(IReadOnlyList <IDataItem> items, string path)
        {
            return(Task.Run(() =>
            {
                try
                {
                    Log.Debug($"Saving model layout to {path}");
                    List <JsonSaveTypes.Node> nodes = ToSaveNodes(items);
                    AddLinesToNodes(items, nodes);

                    JsonSaveTypes.Model dataModel = new JsonSaveTypes.Model {
                        Nodes = nodes
                    };

                    Serialize(path, dataModel);
                }
                catch (UnauthorizedAccessException e)
                {
                    Log.Debug($"Failed to save model layout to {path}, {e.Message}");
                }
                catch (Exception e)
                {
                    Log.Exception(e, $"Failed to save model layout to {path}");
                }
            }));
        }
        public Task SerializeMergedAsync(IReadOnlyList <IDataItem> items, string path)
        {
            return(Task.Run(() =>
            {
                try
                {
                    Log.Debug($"Saving merged model layout to {path}");
                    Timing t = Timing.Start();
                    List <JsonSaveTypes.Node> nodes = ToSaveNodes(items);

                    AddLinesToNodes(items, nodes);

                    nodes = MergeInPreviousSavedNodes(path, nodes);

                    JsonSaveTypes.Model dataModel = new JsonSaveTypes.Model {
                        Nodes = nodes
                    };

                    Serialize(path, dataModel);
                    t.Log("Saved model layout");
                }
                catch (UnauthorizedAccessException e)
                {
                    Log.Debug($"Failed to save {path}, {e.Message}");
                }
                catch (Exception e)
                {
                    Log.Exception(e, $"Failed to serialize to {path}");
                }
            }));
        }
        private static Dictionary <string, JsonSaveTypes.Node> GetPreviousNodes(string path)
        {
            var previousNodes = new Dictionary <string, JsonSaveTypes.Node>();

            try
            {
                JsonSaveTypes.Model model = Deserialize <JsonSaveTypes.Model>(path);
                if (model.FormatVersion == JsonSaveTypes.Version)
                {
                    List <JsonSaveTypes.Node> nodes = model.Nodes;

                    foreach (JsonSaveTypes.Node node in nodes)
                    {
                        previousNodes[node.N] = node;
                    }
                }
            }
            catch (Exception e)
            {
                Log.Exception(e, $"Failed to deserialize {path}");
            }

            return(previousNodes);
        }