diff --git a/Src/Newtonsoft.Json.Tests/Bson/BsonWriterTests.cs b/Src/Newtonsoft.Json.Tests/Bson/BsonWriterTests.cs index 772af120..c53bcd9a 100644 --- a/Src/Newtonsoft.Json.Tests/Bson/BsonWriterTests.cs +++ b/Src/Newtonsoft.Json.Tests/Bson/BsonWriterTests.cs @@ -832,6 +832,56 @@ namespace Newtonsoft.Json.Tests.Bson Assert.IsFalse(reader.Read()); } + + [Test] + public void WriteUri() + { + MemoryStream ms = new MemoryStream(); + BsonWriter writer = new BsonWriter(ms); + + writer.WriteStartObject(); + writer.WritePropertyName("uri0"); + writer.WriteValue(new Uri("http://example.net/")); + writer.WritePropertyName("uri1"); + writer.WriteValue(default(Uri)); + writer.WriteEndObject(); + ms.Seek(0, SeekOrigin.Begin); + + BsonReader reader = new BsonReader(ms); + Assert.IsTrue(reader.Read()); + Assert.AreEqual(JsonToken.StartObject, reader.TokenType); + Assert.IsTrue(reader.Read()); + Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); + Assert.AreEqual("http://example.net/", reader.ReadAsString()); + Assert.IsTrue(reader.Read()); + Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); + Assert.IsNull(reader.ReadAsString()); + } + + [Test] + public void WriteByteArray() + { + MemoryStream ms = new MemoryStream(); + BsonWriter writer = new BsonWriter(ms); + + writer.WriteStartObject(); + writer.WritePropertyName("array0"); + writer.WriteValue(new byte[] {0, 1, 2, 3, 4, 5, 6, 7}); + writer.WritePropertyName("array1"); + writer.WriteValue(default(byte[])); + writer.WriteEndObject(); + ms.Seek(0, SeekOrigin.Begin); + + BsonReader reader = new BsonReader(ms); + Assert.IsTrue(reader.Read()); + Assert.AreEqual(JsonToken.StartObject, reader.TokenType); + Assert.IsTrue(reader.Read()); + Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); + Assert.AreEqual(new byte[] {0, 1, 2, 3, 4, 5, 6, 7}, reader.ReadAsBytes()); + Assert.IsTrue(reader.Read()); + Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); + Assert.IsNull(reader.ReadAsBytes()); + } #endif } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Bson/BsonWriter.cs b/Src/Newtonsoft.Json/Bson/BsonWriter.cs index 9c720f8a..c1e810e6 100644 --- a/Src/Newtonsoft.Json/Bson/BsonWriter.cs +++ b/Src/Newtonsoft.Json/Bson/BsonWriter.cs @@ -461,6 +461,12 @@ namespace Newtonsoft.Json.Bson /// The [] value to write. public override void WriteValue(byte[] value) { + if (value == null) + { + WriteNull(); + return; + } + base.WriteValue(value); AddToken(new BsonBinary(value, BsonBinaryType.Binary)); } @@ -491,6 +497,12 @@ namespace Newtonsoft.Json.Bson /// The value to write. public override void WriteValue(Uri value) { + if (value == null) + { + WriteNull(); + return; + } + base.WriteValue(value); AddToken(new BsonString(value.ToString(), true)); }