Exemplo n.º 1
0
        public override void Serialize(Stream serializationStream, object graph)
        {
            ISerializable     serializable      = (ISerializable)graph;
            SerializationInfo serializationInfo = new SerializationInfo(graph.GetType(), new FormatterConverter());
            StreamingContext  streamingContext  = new StreamingContext(StreamingContextStates.File);

            CustomBinder.BindToName(graph.GetType(), out string assemblyName, out string typeName);
            serializable.GetObjectData(serializationInfo, streamingContext);

            foreach (SerializationEntry item in serializationInfo)
            {
                this.WriteMember(item.Name, item.Value);
            }

            StringBuilder fileContent = new StringBuilder(
                assemblyName + "->" + typeName + "->" + IDGenerator.GetId(graph, out bool _).ToString());

            foreach (Data data in Values)
            {
                fileContent.Append("\n" + data.ToString());
            }
            fileContent.Append("$\n");

            using (StreamWriter writer = new StreamWriter(serializationStream, Encoding.UTF8, 32, true))
            {
                writer.Write(fileContent.ToString());
            }

            fileContent.Clear();
            Values.Clear();
            AllObjects.Add(graph);
            foreach (Object obj in SerializedObjects)
            {
                if (!AllObjects.Contains(obj))
                {
                    this.Serialize(serializationStream, obj);
                }
            }
        }