/// <summary> /// Deserializes and returns the nodeModel that is represented by the original content of this DummyNode. /// If this node cannot be resolved, returns a new DummyNode /// </summary> /// <param name="json"></param> /// <param name="libraryServices"></param> /// <param name="factory"></param> /// <param name="isTestMode"></param> /// <param name="manager"></param> internal NodeModel GetNodeModelForDummyNode(string json, LibraryServices libraryServices, NodeFactory factory, bool isTestMode, CustomNodeManager manager) { var settings = new JsonSerializerSettings { Error = (sender, args) => { args.ErrorContext.Handled = true; Console.WriteLine(args.ErrorContext.Error); }, ReferenceLoopHandling = ReferenceLoopHandling.Ignore, TypeNameHandling = TypeNameHandling.Auto, Formatting = Newtonsoft.Json.Formatting.Indented, Culture = CultureInfo.InvariantCulture, Converters = new List <JsonConverter> { new NodeReadConverter(manager, libraryServices, factory, isTestMode), new TypedParameterConverter() }, ReferenceResolverProvider = () => { return(new IdReferenceResolver()); } }; var result = SerializationExtensions.ReplaceTypeDeclarations(json, true); var resolvedNodeModel = JsonConvert.DeserializeObject <NodeModel>(result, settings); // If the resolved node model is not a dummy node, then copy the node view properties from the dummy node to the resolved version of that node. if (!(resolvedNodeModel is DummyNode)) { SetNodeViewDataOnResolvedNode(this, resolvedNodeModel); } else { this.Log(string.Format("This graph has a node with id:{0} and name:{1}, but it could not be resolved", resolvedNodeModel.GUID, resolvedNodeModel.Name) , WarningLevel.Moderate); } return(resolvedNodeModel); }