Esempio n. 1
0
            public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
            {
                SerializationUtils.Assert(reader.TokenType == JsonTokenType.StartObject);

                SerializationUtils.MustReadPropertyName(ref reader, "Type");
                SerializationUtils.MustReadTokenType(ref reader, JsonTokenType.String);

                T obj;

                try
                {
                    obj = TypeLibrary.CreateInstance <T>(reader.GetString());
                }
                catch (TypeLibrary.UnknownTypeException e)
                {
                    throw new SerializationUtils.UnknownTypeException(reader.GetString(), e);
                }

                SerializationUtils.MustReadPropertyName(ref reader, "ID");
                SerializationUtils.MustReadTokenType(ref reader, JsonTokenType.Number);
                var id = reader.GetInt64();

                var readJsonDelegates = GetReadJsonDelegates(obj);

                reader.Read();
                while (reader.TokenType != JsonTokenType.EndObject)
                {
                    SerializationUtils.Assert(reader.TokenType == JsonTokenType.PropertyName);
                    var typeName = reader.GetString();
                    SerializationUtils.MustReadTokenType(ref reader, JsonTokenType.StartObject);

                    if (readJsonDelegates.ContainsKey(typeName))
                    {
                        readJsonDelegates[typeName].Invoke(ref reader, options);
                    }
                    else
                    {
                        // Warn
                        SerializationUtils.FinishCurrentObject(ref reader);
                    }
                    SerializationUtils.Assert(reader.TokenType == JsonTokenType.EndObject);
                    reader.Read();
                }

                SerializationUtils.Assert(reader.TokenType == JsonTokenType.EndObject);
                m_createdObjects.Add(id, obj);
                return(obj);
            }
Esempio n. 2
0
        static void Main(string[] args)
        {
            AssemblyResolver assemblyResolver = new AssemblyResolver(AssemblyLoadContext.Default);

            assemblyResolver.AddAssemblySearchFolder("D:/ZigZag/ZigZag/Dependencies/bin/Release/net5.0");

            PackageLoader.AddLocalRepository("C:/Users/aart_/AppData/Roaming/ZigZag/LocalPackages");

            bool        forceLoadFromDevPath = true;
            List <Type> editors = new List <Type>();

            if (forceLoadFromDevPath)
            {
                string devLibPath    = "D:/ZigZag/ZigZag/ZigZag.StandardLibrary";
                string devEditorPath = "D:/ZigZag/ZigZag/ZigZag.Editor";

                TypeLibrary.AddTypes(AssemblyReader.GetAllSubclasses(typeof(ZObject),
                                                                     AssemblyLoadContext.Default.LoadFromAssemblyPath(
                                                                         devLibPath + "/Text/TextData/bin/Debug/net5.0/TextData.dll")));

                TypeLibrary.AddTypes(AssemblyReader.GetAllSubclasses(typeof(ZObject),
                                                                     AssemblyLoadContext.Default.LoadFromAssemblyPath(
                                                                         devLibPath + "/Text/LoremIpsum/bin/Debug/net5.0/LoremIpsum.dll")));

                TypeLibrary.AddTypes(AssemblyReader.GetAllSubclasses(typeof(ZObject),
                                                                     AssemblyLoadContext.Default.LoadFromAssemblyPath(
                                                                         devLibPath + "/Text/Print/bin/Debug/net5.0/Print.dll")));

                editors = AssemblyReader.GetAllSubclasses(typeof(IEditor),
                                                          AssemblyLoadContext.Default.LoadFromAssemblyPath(
                                                              devEditorPath + "/bin/Debug/net5.0/ZigZag.Editor.dll"));
            }
            else
            {
                TypeLibrary.AddTypes(AssemblyReader.GetAllSubclasses(typeof(ZObject), PackageLoader.LoadPackage("ZigZag.Text.LoremIpsum", 0)));
                TypeLibrary.AddTypes(AssemblyReader.GetAllSubclasses(typeof(ZObject), PackageLoader.LoadPackage("ZigZag.Text.Print", 0)));
            }

            IEditor editor = null;

            if (editors.Count > 0)
            {
                editor = (IEditor)Activator.CreateInstance(editors[0]);
            }


            var proj = new Project();
            // Make sure project can only execute commands on its own children

            var loremNode  = TypeLibrary.CreateInstance <Node>("ZigZag.Text.LoremIpsum");
            var printNode  = TypeLibrary.CreateInstance <Node>("ZigZag.Text.Print");
            var printNode2 = TypeLibrary.CreateInstance <Node>("ZigZag.Text.Print");
            var par0       = new IntParameter(loremNode);
            var par1       = new FloatParameter(loremNode);
            var par2       = new FloatParameter(loremNode);


            proj.SubmitCommand(new AddNodeCommand(proj, loremNode));
            proj.SubmitCommand(new AddNodeCommand(loremNode, printNode));
            proj.SubmitCommand(new AddNodeCommand(loremNode, printNode2));
            proj.SubmitCommand(new ConnectParametersCommand(par0, par1));
            proj.SubmitCommand(new ConnectParametersCommand(par0, par2));



            proj.Execute();

            //printNode.Name = "pwintie";
            //printNode2.Name = "Lil pwintie";
            //loremNode.Name = "lorem";
            //loremNode.Parent = printNode;
            //printNode2.Parent = printNode;

            string jsonString;
            var    options             = new JsonSerializerOptions();
            var    objectSerializer    = new ZObjectSerializer();
            var    objectRefSerializer = new ObjectRefSerializer();

            options.Converters.Add(new JsonStringEnumConverter());
            options.Converters.Add(objectSerializer);
            options.Converters.Add(objectRefSerializer);
            options.WriteIndented = true;

            jsonString = JsonSerializer.Serialize(loremNode, loremNode.GetType(), options);
            Console.WriteLine(jsonString);

            var n = JsonSerializer.Deserialize(jsonString, typeof(ZObject), options);

            objectRefSerializer.ResolveObjects(objectSerializer.CreatedObjects);


            editor.OpenEditor();
            editor.ProjectChanged(proj);

            while (editor is not null && !editor.WantsToClose())
            {
                editor.Update();
            }

            Console.WriteLine("*");
        }