public abstract string ExportData(NodeGraphData data, List <Type> referenceTypes);
// FIXME: Generic export when recieves ignore field parameters // Add attribute like IgnoreExport or similar // For linked types do similar public override string ExportData(NodeGraphData data, List <Type> referenceTypes) { JSONObject exportJSON = new JSONObject(); JSONObject graph = new JSONObject(); JSONArray graphNodesReferences = new JSONArray(); referenceTypes.Add(typeof(Node)); referenceTypes.Add(typeof(NodeGraph)); referenceTypes.Add(typeof(NodePort)); graph.Add("type", new JSONString(data.graph.GetType().AssemblyQualifiedName)); graph.Add("name", new JSONString(data.graph.name)); graph.Add("id", new JSONNumber(data.graph.GetHashCode())); NodeGraph g = data.graph; graph = (JSONObject)SimpleJSONExtension.ToJSON(g, graph, new List <string>() { "sceneVariables" }, referenceTypes); JSONArray connections = new JSONArray(); for (int c = 0; c < data.connections.Count; c++) { JSONObject connection = new JSONObject(); connection.Add("port1ID", data.connections[c].port1ID); connection.Add("port2ID", data.connections[c].port2ID); connections.Add(connection); } JSONArray nodes = new JSONArray(); for (int n = 0; n < data.nodes.Count; n++) { Node node = data.nodes[n].node; JSONObject nodeJSON = new JSONObject(); nodeJSON.Add("name", node.name); nodeJSON.Add("type", node.GetType().AssemblyQualifiedName); nodeJSON.Add("position", node.position); nodeJSON.Add("id", node.GetHashCode()); JSONArray nodePorts = new JSONArray(); for (int np = 0; np < data.nodes[n].ports.Count; np++) { NodePort port = data.nodes[n].ports[np].port; JSONObject nodePortJSON = new JSONObject(); nodePortJSON.Add("name", port.fieldName); nodePortJSON.Add("id", port.GetHashCode()); nodePortJSON.Add("dynamic", port.IsDynamic); nodePortJSON.Add("valueType", port.ValueType.AssemblyQualifiedName); nodePortJSON.Add("typeConstraint", (int)port.typeConstraint); nodePortJSON.Add("connectionType", (int)port.connectionType); nodePortJSON.Add("direction", (int)port.direction); nodePorts.Add(nodePortJSON); } nodeJSON.Add("ports", nodePorts); nodeJSON = (JSONObject)SimpleJSONExtension.ToJSON(node, nodeJSON, new List <string>(), referenceTypes); nodes.Add(nodeJSON); } exportJSON.Add("graph", graph); exportJSON.Add("connections", connections); exportJSON.Add("nodes", nodes); return(exportJSON.ToString()); }
public string Export(NodeGraph graph) { NodeGraphData data = ConvertToNodeGraphData(graph); return(ExportData(data, new List <Type>())); }