Exemplo n.º 1
0
        public IHandmadeSerializable[] DeserializeArray
        (
            [NotNull] BinaryReader reader
        )
        {
            Sure.NotNull(reader, nameof(reader));

            int    count    = reader.ReadPackedInt32();
            string typeName = reader.ReadString();

            if (PrefixLength == PrefixLength.Short)
            {
                typeName = Namespace + "." + typeName;
            }

            Type type = ReferenceEquals(Assembly, null)
                ? Type.GetType(typeName, true)
                : Assembly.GetType(typeName, true);

            IHandmadeSerializable[] result = new IHandmadeSerializable[count];

            for (int i = 0; i < count; i++)
            {
                IHandmadeSerializable obj = (IHandmadeSerializable)Activator.CreateInstance(type);
                obj.RestoreFromStream(reader);
                result[i] = obj;
            }

            return(result);
        }
Exemplo n.º 2
0
        public HandmadeSerializer Serialize
        (
            [NotNull] BinaryWriter writer,
            [NotNull] IHandmadeSerializable obj
        )
        {
            Sure.NotNull(writer, nameof(writer));
            Sure.NotNull(obj, nameof(obj));

            string typeName = GetTypeName(obj);

            writer.Write(typeName);

            obj.SaveToStream(writer);

            return(this);
        }
Exemplo n.º 3
0
        public HandmadeSerializer Serialize
        (
            [NotNull] BinaryWriter writer,
            [NotNull][ItemNotNull] IHandmadeSerializable[] array
        )
        {
            Sure.NotNull(writer, nameof(writer));
            Sure.NotNull(array, nameof(array));

            int count = array.Length;

            if (count == 0)
            {
                Log.Error
                (
                    nameof(HandmadeSerializer) + "::" + nameof(Serialize)
                    + ": count=0"
                );

                throw new ArgumentException();
            }

            writer.WritePackedInt32(count);

            IHandmadeSerializable first = array[0];

            string typeName = GetTypeName(first);

            writer.Write(typeName);

            foreach (IHandmadeSerializable obj in array)
            {
                obj.SaveToStream(writer);
            }

            return(this);
        }
Exemplo n.º 4
0
        public IHandmadeSerializable Deserialize
        (
            [NotNull] BinaryReader reader
        )
        {
            Sure.NotNull(reader, nameof(reader));

            string typeName = reader.ReadString();

            if (PrefixLength == PrefixLength.Short)
            {
                typeName = Namespace + "." + typeName;
            }

            Type type = ReferenceEquals(Assembly, null)
                ? Type.GetType(typeName, true)
                : Assembly.GetType(typeName, true);

            IHandmadeSerializable result = (IHandmadeSerializable)Activator.CreateInstance(type);

            result.RestoreFromStream(reader);

            return(result);
        }