Beispiel #1
0
        /// <summary>
        /// Deserializes BSON document from stream containing BSON-encoded data
        /// </summary>
        public BSONDocument(Stream stream)
        {
            if (stream == null)
            {
                throw new BSONException(StringConsts.ARGUMENT_ERROR + "BSONDocument.ctor(stream==null)");
            }

            long start     = stream.Position;
            var  totalSize = BinUtils.ReadInt32(stream);
            long read      = 4;

            while (read < totalSize - 1)
            {
                var et      = BinUtils.ReadElementType(stream);
                var factory = BSONElement.GetElementFactory(et);
                var element = factory(stream);//element made
                Set(element);
                read = stream.Position - start;
            }
            var terminator = BinUtils.ReadByte(stream);

            if (terminator != BinUtils.TERMINATOR || stream.Position - start != totalSize)
            {
                throw new BSONException(StringConsts.BSON_EOD_ERROR);
            }
        }
Beispiel #2
0
        protected override void ReadValueFromStream(Stream stream)
        {
            var  elements  = new List <BSONElement>();
            long start     = stream.Position;
            var  totalSize = BinUtils.ReadInt32(stream);
            long read      = 4;

            while (read < totalSize - 1)
            {
                var et      = BinUtils.ReadElementType(stream);
                var factory = BSONElement.GetElementFactory(et);
                var element = factory(stream);//element made
                element.MarkAsArrayItem();
                elements.Add(element);
                read = stream.Position - start;
            }
            Value = elements.ToArray();

            var terminator = BinUtils.ReadByte(stream);

            if (terminator != BinUtils.TERMINATOR || stream.Position - start != totalSize)
            {
                throw new BSONException(StringConsts.BSON_EOD_ERROR);
            }
        }