示例#1
0
        internal static void WriteIEnumerable(this IEnumerable values, BinaryWriter writer)
        {
            bool         first    = true;
            var          position = 0L;
            var          count    = 0;
            BSonTypeEnum type     = BSonTypeEnum.BSON_Null;

            foreach (var item in values)
            {
                if (first)
                {
                    first = false;
                    type  = item.GetBSonType();
                    writer.Write((byte)type);                            // scrivo il tipo dell'item nell'array
                    position = writer.BaseStream.Position;               // salvo la posizione per scrivere la dimenzione dell'array
                    writer.Write((int)0);                                // scrivo 0 perchè non so quato è grande l'array
                    BSonSerializer.WriteCorrectType(item, writer, type); // scrivo l'item
                }
                else
                {
                    BSonSerializer.WriteCorrectType(item, writer, type); // scrivo l'item
                }
                count++;
            }

            writer.BaseStream.Position = position;
            writer.Write(count);
            writer.BaseStream.Seek(0, SeekOrigin.End);
        }
示例#2
0
        public void GetBytes(BinaryWriter writer)
        {
            if (Value is BSonDoc)
            {
                var doc = Value as BSonDoc;
                doc.Name = Name;
                doc.GetBytes(writer);
                return;
            }

            var type = BSonSerializer.GetBSonType(Value);

            writer.Write((byte)type);
            writer.Write(Name);
            BSonSerializer.WriteCorrectType(Value, writer, type);
        }