diff --git a/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs b/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs index 6cf8f872..871809ae 100644 --- a/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs +++ b/Src/Newtonsoft.Json.Tests/Bson/BsonReaderTests.cs @@ -1708,6 +1708,26 @@ namespace Newtonsoft.Json.Tests.Bson CollectionAssert.AreEquivalent(g.ToByteArray(), b.TheGuid); } + [Test] + public void DeserializeBsonDocumentWithString() + { + byte[] data = HexToBytes("10-00-00-00-02-62-00-04-00-00-00-61-62-63-00-00"); + JsonSerializer serializer = new JsonSerializer(); + JObject jObj = (JObject)serializer.Deserialize(new BsonReader(new MemoryStream(data))); + string stringValue = jObj.Value("b"); + Assert.AreEqual("abc", stringValue); + } + + [Test] + public void DeserializeBsonDocumentWithGuid() + { + byte[] data = HexToBytes("1D-00-00-00-05-62-00-10-00-00-00-04-DF-41-E3-E2-39-EE-BB-4C-86-C0-06-A7-64-33-61-E1-00"); + JsonSerializer serializer = new JsonSerializer(); + JObject jObj = (JObject)serializer.Deserialize(new BsonReader(new MemoryStream(data))); + Guid guidValue = jObj.Value("b"); + Assert.AreEqual(new Guid("e2e341df-ee39-4cbb-86c0-06a7643361e1"), guidValue); + } + public class BytesTestClass { public byte[] TheGuid { get; set; } diff --git a/Src/Newtonsoft.Json/JsonWriter.cs b/Src/Newtonsoft.Json/JsonWriter.cs index a1cd1888..a70f564d 100644 --- a/Src/Newtonsoft.Json/JsonWriter.cs +++ b/Src/Newtonsoft.Json/JsonWriter.cs @@ -549,7 +549,10 @@ namespace Newtonsoft.Json WriteRawValue((reader.Value != null) ? reader.Value.ToString() : null); break; case JsonToken.Bytes: - WriteValue((byte[])reader.Value); + if (reader.Value is Guid) + WriteValue((Guid)reader.Value); + else + WriteValue((byte[])reader.Value); break; default: throw MiscellaneousUtils.CreateArgumentOutOfRangeException("TokenType", reader.TokenType, "Unexpected token type.");