/// <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); } }
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); } }