diff --git a/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs b/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs index 95fa88f9..9c8c7f95 100644 --- a/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs +++ b/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs @@ -69,6 +69,53 @@ namespace Newtonsoft.Json.Tests.Bson Assert.AreEqual("1", (string)o["$id"]); } + public class MyTest + { + public DateTime TimeStamp { get; set; } + public string UserName { get; set; } + public MemoryStream Blob { get; set; } + } + + [Test] + public void Bson_SupportMultipleContent() + { + MemoryStream myStream = new MemoryStream(); + BsonWriter writer = new BsonWriter(myStream); + JsonSerializer serializer = new JsonSerializer(); + MyTest tst1 = new MyTest + { + TimeStamp = new DateTime(2000, 12, 20, 12, 59, 59, DateTimeKind.Utc), + UserName = "Joe Doe" + }; + MyTest tst2 = new MyTest + { + TimeStamp = new DateTime(2010, 12, 20, 12, 59, 59, DateTimeKind.Utc), + UserName = "Bob" + }; + serializer.Serialize(writer, tst1); + serializer.Serialize(writer, tst2); + + myStream.Seek(0, SeekOrigin.Begin); + + BsonReader reader = new BsonReader(myStream) + { + SupportMultipleContent = true, + DateTimeKindHandling = DateTimeKind.Utc + }; + + MyTest tst1A = serializer.Deserialize(reader); + + reader.Read(); + + MyTest tst2A = serializer.Deserialize(reader); + + Assert.AreEqual(tst1.UserName, tst1A.UserName); + Assert.AreEqual(tst1.TimeStamp, tst1A.TimeStamp); + + Assert.AreEqual(tst2.UserName, tst2A.UserName); + Assert.AreEqual(tst2.TimeStamp, tst2A.TimeStamp); + } + [Test] public void CloseInput() { diff --git a/Src/Newtonsoft.Json/Bson/BsonReader.cs b/Src/Newtonsoft.Json/Bson/BsonReader.cs index 2775b579..fe8a2481 100644 --- a/Src/Newtonsoft.Json/Bson/BsonReader.cs +++ b/Src/Newtonsoft.Json/Bson/BsonReader.cs @@ -370,6 +370,11 @@ namespace Newtonsoft.Json.Bson ContainerContext context = _currentContext; if (context == null) { + if (SupportMultipleContent) + { + goto case State.Start; + } + return false; }