Fix BsonReader reading multiple content (#1870)

This commit is contained in:
James Newton-King
2018-10-11 15:10:21 +13:00
committed by GitHub
parent bfdb48a716
commit 8e16489cbb
2 changed files with 52 additions and 0 deletions
@@ -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<MyTest>(reader);
reader.Read();
MyTest tst2A = serializer.Deserialize<MyTest>(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()
{
+5
View File
@@ -370,6 +370,11 @@ namespace Newtonsoft.Json.Bson
ContainerContext context = _currentContext;
if (context == null)
{
if (SupportMultipleContent)
{
goto case State.Start;
}
return false;
}