public void SaveTo(string filename) { var entities = new List <dynamic>(); File.Entities.Clear(); NewIds.Clear(); // we need to define all the ids before serializing foreach (var defPair in Factory.Definitions) { IDeclarator parent = defPair.Value.Parent; File.Entities.Add(new SerializationModel.Entity { Id = (uint)File.Entities.Count, Name = defPair.Value.Name, Type = Factory.GetEntityType(defPair.Key), Visibility = parent == null ? EntityFactory.VISIBILITY.PUBLIC : (EntityFactory.VISIBILITY)parent.GetVisibilityOf(defPair.Value.Name) }); NewIds[defPair.Value] = File.Entities.Last().Id; } // then we just have to get each data individually foreach (IDefinition definition in NewIds.Keys) { if (entities.Count == 9) { Console.WriteLine("On debug ici"); } dynamic entity = GetSerializableEntityFrom(definition); if (entity == null) { throw new InvalidOperationException($"Cannot determine the type of entity to serialize {entity.Type}"); } entities.Add(entity); } // finally we persist the data into a file using (var saveFile = new StreamWriter(filename)) { BinarySerializer.Serializer.Serialize(File, saveFile.BaseStream); foreach (var entity in entities) { BinarySerializer.Serializer.Serialize(entity, saveFile.BaseStream); } } }
/// <summary> /// Default constructor that add default entities (global context and scalar types) /// </summary> public EntityFactory() { //global context is in 0 AddEntity(new CorePackage.Entity.Context()); IDeclarator root = GetDeclarator(0); (root as IDefinition).Name = ""; //boolean type is in 1 AddEntity(Builtins.Boolean); Builtins.Boolean.Parent = root; Builtins.Boolean.Name = "Bool"; root.Declare(Builtins.Boolean, "Bool", AccessMode.EXTERNAL); //integer type is in 2 AddEntity(Builtins.Integer); Builtins.Integer.Parent = root; Builtins.Integer.Name = "Integer"; root.Declare(Builtins.Integer, "Integer", AccessMode.EXTERNAL); //floating type is in 3 AddEntity(Builtins.Floating); Builtins.Floating.Parent = root; Builtins.Floating.Name = "Floating"; root.Declare(Builtins.Floating, "Floating", AccessMode.EXTERNAL); //character type is in 4 AddEntity(Builtins.Character); Builtins.Character.Parent = root; Builtins.Character.Name = "Character"; root.Declare(Builtins.Character, "Character", AccessMode.EXTERNAL); //string type is in 5 AddEntity(Builtins.String); Builtins.String.Parent = root; Builtins.String.Name = "String"; root.Declare(Builtins.String, "String", AccessMode.EXTERNAL); //dict type is in 6 AddEntity(Builtins.Dictionnary); Builtins.Dictionnary.Parent = root; Builtins.Dictionnary.Name = "Dict"; root.Declare(Builtins.Dictionnary, "Dict", AccessMode.EXTERNAL); //any type is in 7 AddEntity(Builtins.Any); Builtins.Any.Parent = root; Builtins.Any.Name = "Any"; root.Declare(Builtins.Any, "Any", AccessMode.EXTERNAL); //matrix type is in 8 AddEntity(Builtins.Matrix); Builtins.Matrix.Parent = root; Builtins.Matrix.Name = "Matrix"; root.Declare(Builtins.Matrix, "Matrix", AccessMode.EXTERNAL); //ressource type is in 9 AddEntity(Builtins.Resource); Builtins.Resource.Parent = root; Builtins.Resource.Name = "Ressource"; root.Declare(Builtins.Resource, "Ressource", AccessMode.EXTERNAL); }