public static void ReadStreamedObject(BinaryReader reader, IStreamedObject StreamedObject, object options)
 {
     if (ReadValueType(reader) == ValueType.StreamedObject)
     {
         reader.ReadInt64();
         StreamedObject.ReadStream(reader, options);
     }
     else
     {
         InvalidPropError(reader.BaseStream.Position - sizeof(byte));
     }
 }
        public static void WriteStreamedObject(BinaryWriter writer, IStreamedObject StreamedObject)
        {
            // This version doesn't write a tag before the StreamedObject
            if (StreamedObject == null)
            {
                return;
            }
            WriteValueType(writer, ValueType.StreamedObject);
            var  pos = writer.BaseStream.Position;
            long L   = 0;

            writer.Write(L); // Reserve the place for the size of the block
            StreamedObject.WriteStream(writer, null);
            var pos2 = writer.BaseStream.Position;

            writer.BaseStream.Seek(pos, SeekOrigin.Begin);
            L = pos2 - pos - sizeof(long);
            writer.Write(L);
            writer.BaseStream.Seek(pos2, SeekOrigin.Begin);
        }
        public static void WriteStreamedObject(BinaryWriter writer, IStreamedObject StreamedObject, Tags tag,
                                               object options)
        {
            if (StreamedObject == null)
            {
                return;
            }
            WriteTag(writer, tag);
            WriteValueType(writer, ValueType.StreamedObject);
            var  pos = writer.BaseStream.Position;
            long L   = 0;

            writer.Write(L); // Reserve the place for the size of the block
            StreamedObject.WriteStream(writer, options);
            var pos2 = writer.BaseStream.Position;

            writer.BaseStream.Seek(pos, SeekOrigin.Begin);
            L = pos2 - pos - sizeof(long);
            writer.Write(L);
            writer.BaseStream.Seek(pos2, SeekOrigin.Begin);
        }
        public static void WriteTypedStreamedObject(BinaryWriter writer, IStreamedObject StreamedObject, Tags tag,
                                                    object options)
        {
            if (StreamedObject == null)
            {
                return;
            }
            WriteTag(writer, tag);
            WriteValueType(writer, ValueType.TypedStreamedObject);
            var  pos = writer.BaseStream.Position;
            long L   = 0;

            writer.Write(L); // Reserve the place for the size of the block
            // First write the type of the object - later on it'll be used to recreate the object
            WriteType(writer, StreamedObject.GetType());
            StreamedObject.WriteStream(writer, options);
            var pos2 = writer.BaseStream.Position;

            writer.BaseStream.Seek(pos, SeekOrigin.Begin);
            L = pos2 - pos - sizeof(long);
            writer.Write(L);
            writer.BaseStream.Seek(pos2, SeekOrigin.Begin);
        }
 public static void ReadStreamedObject(BinaryReader reader, IStreamedObject StreamedObject)
 {
     ReadStreamedObject(reader, StreamedObject, null);
 }
 public static void WriteTypedStreamedObject(BinaryWriter writer, IStreamedObject StreamedObject, Tags tag)
 {
     WriteTypedStreamedObject(writer, StreamedObject, tag, null);
 }