コード例 #1
0
        /// <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);
        }