diff --git a/src/MongoDB.Bson/BsonDefaults.cs b/src/MongoDB.Bson/BsonDefaults.cs
index 9352d3228ff..9a6cbf40bdb 100644
--- a/src/MongoDB.Bson/BsonDefaults.cs
+++ b/src/MongoDB.Bson/BsonDefaults.cs
@@ -13,9 +13,6 @@
* limitations under the License.
*/
-using System;
-using System.Collections.Generic;
-using System.Dynamic;
using MongoDB.Bson.Serialization;
namespace MongoDB.Bson
{
@@ -24,33 +21,14 @@ namespace MongoDB.Bson
///
public static class BsonDefaults
{
- // private static fields
- private static bool __dynamicArraySerializerWasSet;
- private static IBsonSerializer __dynamicArraySerializer;
- private static bool __dynamicDocumentSerializerWasSet;
- private static IBsonSerializer __dynamicDocumentSerializer;
- private static int __maxDocumentSize = int.MaxValue;
- private static int __maxSerializationDepth = 100;
-
// public static properties
///
/// Gets or sets the dynamic array serializer.
///
public static IBsonSerializer DynamicArraySerializer
{
- get
- {
- if (!__dynamicArraySerializerWasSet)
- {
- __dynamicArraySerializer = BsonSerializer.LookupSerializer>();
- }
- return __dynamicArraySerializer;
- }
- set
- {
- __dynamicArraySerializerWasSet = true;
- __dynamicArraySerializer = value;
- }
+ get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicArraySerializer;
+ set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicArraySerializer = value;
}
///
@@ -58,28 +36,22 @@ public static IBsonSerializer DynamicArraySerializer
///
public static IBsonSerializer DynamicDocumentSerializer
{
- get
- {
- if (!__dynamicDocumentSerializerWasSet)
- {
- __dynamicDocumentSerializer = BsonSerializer.LookupSerializer();
- }
- return __dynamicDocumentSerializer;
- }
- set
- {
- __dynamicDocumentSerializerWasSet = true;
- __dynamicDocumentSerializer = value;
- }
+ get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicDocumentSerializer;
+ set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicDocumentSerializer = value;
}
+ /* DOMAIN-API DynamicSerializer are used only in a handful of serializers, so they should be removed from here (and possibly from the public API altogether).
+ * MaxDocumentSize should probably be removed from the public API too, as it should come from the server.
+ * MaxSerializationDepeth is definitely usedful. Does it make sense to keep it global...?
+ */
+
///
/// Gets or sets the default max document size. The default is 4MiB.
///
public static int MaxDocumentSize
{
- get { return __maxDocumentSize; }
- set { __maxDocumentSize = value; }
+ get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxDocumentSize;
+ set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxDocumentSize = value;
}
///
@@ -87,8 +59,8 @@ public static int MaxDocumentSize
///
public static int MaxSerializationDepth
{
- get { return __maxSerializationDepth; }
- set { __maxSerializationDepth = value; }
+ get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxSerializationDepth;
+ set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxSerializationDepth = value;
}
}
}
diff --git a/src/MongoDB.Bson/BsonDefaultsDomain.cs b/src/MongoDB.Bson/BsonDefaultsDomain.cs
new file mode 100644
index 00000000000..b105e739374
--- /dev/null
+++ b/src/MongoDB.Bson/BsonDefaultsDomain.cs
@@ -0,0 +1,73 @@
+/* Copyright 2010-present MongoDB Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System.Collections.Generic;
+using System.Dynamic;
+using MongoDB.Bson.Serialization;
+
+namespace MongoDB.Bson
+{
+ internal class BsonDefaultsDomain : IBsonDefaults
+ {
+ private IBsonSerializationDomain _serializationDomain;
+ private bool _dynamicArraySerializerWasSet;
+ private IBsonSerializer _dynamicArraySerializer;
+ private bool _dynamicDocumentSerializerWasSet;
+ private IBsonSerializer _dynamicDocumentSerializer;
+
+ public BsonDefaultsDomain(IBsonSerializationDomain serializationDomain)
+ {
+ _serializationDomain = serializationDomain;
+ }
+
+ public IBsonSerializer DynamicArraySerializer
+ {
+ get
+ {
+ if (!_dynamicArraySerializerWasSet)
+ {
+ _dynamicArraySerializer = _serializationDomain.LookupSerializer>();
+ }
+ return _dynamicArraySerializer;
+ }
+ set
+ {
+ _dynamicArraySerializerWasSet = true;
+ _dynamicArraySerializer = value;
+ }
+ }
+
+ public IBsonSerializer DynamicDocumentSerializer
+ {
+ get
+ {
+ if (!_dynamicDocumentSerializerWasSet)
+ {
+ _dynamicDocumentSerializer = _serializationDomain.LookupSerializer();
+ }
+ return _dynamicDocumentSerializer;
+ }
+ set
+ {
+ _dynamicDocumentSerializerWasSet = true;
+ _dynamicDocumentSerializer = value;
+ }
+ }
+
+ public int MaxDocumentSize { get; set; } = int.MaxValue;
+
+ public int MaxSerializationDepth { get; set; } = 100;
+ }
+}
\ No newline at end of file
diff --git a/src/MongoDB.Bson/BsonExtensionMethods.cs b/src/MongoDB.Bson/BsonExtensionMethods.cs
index bcb41a8271f..09b317f6dc8 100644
--- a/src/MongoDB.Bson/BsonExtensionMethods.cs
+++ b/src/MongoDB.Bson/BsonExtensionMethods.cs
@@ -25,6 +25,8 @@ namespace MongoDB.Bson
///
public static class BsonExtensionMethods
{
+ //DOMAIN-API We should remove all the methods that do not take a serialization domain.
+ //QUESTION: Do we want to do something now about this...? The methods are also used internally, but it seems in most cases it's used for "default serialization" and for "ToString" methods, so it should be ok.
///
/// Serializes an object to a BSON byte array.
///
@@ -41,12 +43,21 @@ public static byte[] ToBson(
IBsonSerializer serializer = null,
BsonBinaryWriterSettings writerSettings = null,
Action configurator = null,
- BsonSerializationArgs args = default(BsonSerializationArgs),
+ BsonSerializationArgs args = default,
+ int estimatedBsonSize = 0) => ToBson(obj, BsonSerializer.DefaultSerializationDomain, serializer, writerSettings, configurator, args, estimatedBsonSize);
+
+ private static byte[] ToBson(
+ this TNominalType obj,
+ IBsonSerializationDomain serializationDomain,
+ IBsonSerializer serializer = null,
+ BsonBinaryWriterSettings writerSettings = null,
+ Action configurator = null,
+ BsonSerializationArgs args = default,
int estimatedBsonSize = 0)
{
args.SetOrValidateNominalType(typeof(TNominalType), "");
- return ToBson(obj, typeof(TNominalType), writerSettings, serializer, configurator, args, estimatedBsonSize);
+ return ToBson(obj, typeof(TNominalType), serializationDomain, writerSettings, serializer, configurator, args, estimatedBsonSize);
}
///
@@ -68,7 +79,18 @@ public static byte[] ToBson(
BsonBinaryWriterSettings writerSettings = null,
IBsonSerializer serializer = null,
Action configurator = null,
- BsonSerializationArgs args = default(BsonSerializationArgs),
+ BsonSerializationArgs args = default,
+ int estimatedBsonSize = 0) => ToBson(obj, nominalType, BsonSerializer.DefaultSerializationDomain, writerSettings,
+ serializer, configurator, args, estimatedBsonSize);
+
+ private static byte[] ToBson(
+ this object obj,
+ Type nominalType,
+ IBsonSerializationDomain serializationDomain,
+ BsonBinaryWriterSettings writerSettings = null,
+ IBsonSerializer serializer = null,
+ Action configurator = null,
+ BsonSerializationArgs args = default,
int estimatedBsonSize = 0)
{
if (estimatedBsonSize < 0)
@@ -84,7 +106,7 @@ public static byte[] ToBson(
if (serializer == null)
{
- serializer = BsonSerializer.LookupSerializer(nominalType);
+ serializer = serializationDomain.LookupSerializer(nominalType);
}
if (serializer.ValueType != nominalType)
{
@@ -96,7 +118,7 @@ public static byte[] ToBson(
{
using (var bsonWriter = new BsonBinaryWriter(memoryStream, writerSettings ?? BsonBinaryWriterSettings.Defaults))
{
- var context = BsonSerializationContext.CreateRoot(bsonWriter, configurator);
+ var context = BsonSerializationContext.CreateRoot(bsonWriter, serializationDomain, configurator);
serializer.Serialize(context, args, obj);
}
return memoryStream.ToArray();
@@ -116,7 +138,7 @@ public static BsonDocument ToBsonDocument(
this TNominalType obj,
IBsonSerializer serializer = null,
Action configurator = null,
- BsonSerializationArgs args = default(BsonSerializationArgs))
+ BsonSerializationArgs args = default)
{
args.SetOrValidateNominalType(typeof(TNominalType), "");
return ToBsonDocument(obj, typeof(TNominalType), serializer, configurator, args);
@@ -138,7 +160,16 @@ public static BsonDocument ToBsonDocument(
Type nominalType,
IBsonSerializer serializer = null,
Action configurator = null,
- BsonSerializationArgs args = default(BsonSerializationArgs))
+ BsonSerializationArgs args = default) => ToBsonDocument(obj, nominalType,
+ BsonSerializer.DefaultSerializationDomain, serializer, configurator, args);
+
+ private static BsonDocument ToBsonDocument(
+ this object obj,
+ Type nominalType,
+ IBsonSerializationDomain serializationDomain,
+ IBsonSerializer serializer = null,
+ Action configurator = null,
+ BsonSerializationArgs args = default)
{
if (nominalType == null)
{
@@ -165,7 +196,7 @@ public static BsonDocument ToBsonDocument(
return convertibleToBsonDocument.ToBsonDocument(); // use the provided ToBsonDocument method
}
- serializer = BsonSerializer.LookupSerializer(nominalType);
+ serializer = serializationDomain.LookupSerializer(nominalType);
}
if (serializer.ValueType != nominalType)
{
@@ -177,7 +208,7 @@ public static BsonDocument ToBsonDocument(
var document = new BsonDocument();
using (var bsonWriter = new BsonDocumentWriter(document))
{
- var context = BsonSerializationContext.CreateRoot(bsonWriter, configurator);
+ var context = BsonSerializationContext.CreateRoot(bsonWriter, serializationDomain, configurator);
serializer.Serialize(context, args, obj);
}
return document;
@@ -200,7 +231,7 @@ public static string ToJson(
JsonWriterSettings writerSettings = null,
IBsonSerializer serializer = null,
Action configurator = null,
- BsonSerializationArgs args = default(BsonSerializationArgs))
+ BsonSerializationArgs args = default)
{
args.SetOrValidateNominalType(typeof(TNominalType), "");
return ToJson(obj, typeof(TNominalType), writerSettings, serializer, configurator, args);
@@ -226,7 +257,17 @@ public static string ToJson(
JsonWriterSettings writerSettings = null,
IBsonSerializer serializer = null,
Action configurator = null,
- BsonSerializationArgs args = default(BsonSerializationArgs))
+ BsonSerializationArgs args = default)
+ => ToJson(obj, nominalType, BsonSerializer.DefaultSerializationDomain, writerSettings, serializer, configurator, args);
+
+ private static string ToJson(
+ this object obj,
+ Type nominalType,
+ IBsonSerializationDomain domain,
+ JsonWriterSettings writerSettings = null,
+ IBsonSerializer serializer = null,
+ Action configurator = null,
+ BsonSerializationArgs args = default)
{
if (nominalType == null)
{
@@ -236,7 +277,7 @@ public static string ToJson(
if (serializer == null)
{
- serializer = BsonSerializer.LookupSerializer(nominalType);
+ serializer = domain.LookupSerializer(nominalType);
}
if (serializer.ValueType != nominalType)
{
@@ -248,7 +289,7 @@ public static string ToJson(
{
using (var bsonWriter = new JsonWriter(stringWriter, writerSettings ?? JsonWriterSettings.Defaults))
{
- var context = BsonSerializationContext.CreateRoot(bsonWriter, configurator);
+ var context = BsonSerializationContext.CreateRoot(bsonWriter, domain, configurator);
serializer.Serialize(context, args, obj);
}
return stringWriter.ToString();
diff --git a/src/MongoDB.Bson/IBsonDefaults.cs b/src/MongoDB.Bson/IBsonDefaults.cs
new file mode 100644
index 00000000000..e843c8eb4a4
--- /dev/null
+++ b/src/MongoDB.Bson/IBsonDefaults.cs
@@ -0,0 +1,39 @@
+/* Copyright 2010-present MongoDB Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using MongoDB.Bson.Serialization;
+
+namespace MongoDB.Bson
+{
+ internal interface IBsonDefaults
+ {
+ ///
+ ///
+ ///
+ IBsonSerializer DynamicArraySerializer { get; set; }
+ ///
+ ///
+ ///
+ IBsonSerializer DynamicDocumentSerializer { get; set; }
+ ///
+ ///
+ ///
+ int MaxDocumentSize { get; set; }
+ ///
+ ///
+ ///
+ int MaxSerializationDepth { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/MongoDB.Bson/IO/BsonReader.cs b/src/MongoDB.Bson/IO/BsonReader.cs
index 25724b855e7..d3b4d3bfaa7 100644
--- a/src/MongoDB.Bson/IO/BsonReader.cs
+++ b/src/MongoDB.Bson/IO/BsonReader.cs
@@ -321,13 +321,13 @@ public virtual IByteBuffer ReadRawBsonArray()
// overridden in BsonBinaryReader to read the raw bytes from the stream
// for all other streams, deserialize the array and reserialize it using a BsonBinaryWriter to get the raw bytes
- var deserializationContext = BsonDeserializationContext.CreateRoot(this);
+ var deserializationContext = BsonDeserializationContext.CreateRoot(this, BsonSerializer.DefaultSerializationDomain);
var array = BsonArraySerializer.Instance.Deserialize(deserializationContext);
using (var memoryStream = new MemoryStream())
using (var bsonWriter = new BsonBinaryWriter(memoryStream, BsonBinaryWriterSettings.Defaults))
{
- var serializationContext = BsonSerializationContext.CreateRoot(bsonWriter);
+ var serializationContext = BsonSerializationContext.CreateRoot(bsonWriter, BsonSerializer.DefaultSerializationDomain);
bsonWriter.WriteStartDocument();
var startPosition = memoryStream.Position + 3; // just past BsonType, "x" and null byte
bsonWriter.WriteName("x");
@@ -351,7 +351,7 @@ public virtual IByteBuffer ReadRawBsonDocument()
// overridden in BsonBinaryReader to read the raw bytes from the stream
// for all other streams, deserialize the document and use ToBson to get the raw bytes
- var deserializationContext = BsonDeserializationContext.CreateRoot(this);
+ var deserializationContext = BsonDeserializationContext.CreateRoot(this, BsonSerializer.DefaultSerializationDomain);
var document = BsonDocumentSerializer.Instance.Deserialize(deserializationContext);
var bytes = document.ToBson();
return new ByteArrayBuffer(bytes, isReadOnly: true);
diff --git a/src/MongoDB.Bson/IO/BsonWriter.cs b/src/MongoDB.Bson/IO/BsonWriter.cs
index 3fd705fa31b..fd166783f01 100644
--- a/src/MongoDB.Bson/IO/BsonWriter.cs
+++ b/src/MongoDB.Bson/IO/BsonWriter.cs
@@ -326,13 +326,13 @@ public virtual void WriteRawBsonArray(IByteBuffer slice)
stream.Position = 0;
using (var reader = new BsonBinaryReader(stream, BsonBinaryReaderSettings.Defaults))
{
- var deserializationContext = BsonDeserializationContext.CreateRoot(reader);
+ var deserializationContext = BsonDeserializationContext.CreateRoot(reader, BsonSerializer.DefaultSerializationDomain);
reader.ReadStartDocument();
reader.ReadName("x");
var array = BsonArraySerializer.Instance.Deserialize(deserializationContext);
reader.ReadEndDocument();
- var serializationContext = BsonSerializationContext.CreateRoot(this);
+ var serializationContext = BsonSerializationContext.CreateRoot(this, BsonSerializer.DefaultSerializationDomain);
BsonArraySerializer.Instance.Serialize(serializationContext, array);
}
}
@@ -350,10 +350,10 @@ public virtual void WriteRawBsonDocument(IByteBuffer slice)
using (var stream = new ByteBufferStream(slice, ownsBuffer: false))
using (var bsonReader = new BsonBinaryReader(stream, BsonBinaryReaderSettings.Defaults))
{
- var deserializationContext = BsonDeserializationContext.CreateRoot(bsonReader);
+ var deserializationContext = BsonDeserializationContext.CreateRoot(bsonReader, BsonSerializer.DefaultSerializationDomain);
var document = BsonDocumentSerializer.Instance.Deserialize(deserializationContext);
- var serializationContext = BsonSerializationContext.CreateRoot(this);
+ var serializationContext = BsonSerializationContext.CreateRoot(this, BsonSerializer.DefaultSerializationDomain);
BsonDocumentSerializer.Instance.Serialize(serializationContext, document);
}
}
diff --git a/src/MongoDB.Bson/IO/ElementAppendingBsonWriter.cs b/src/MongoDB.Bson/IO/ElementAppendingBsonWriter.cs
index 0e83adcdb91..9cf9b3c2d28 100644
--- a/src/MongoDB.Bson/IO/ElementAppendingBsonWriter.cs
+++ b/src/MongoDB.Bson/IO/ElementAppendingBsonWriter.cs
@@ -60,7 +60,7 @@ public override void WriteEndDocument()
Wrapped.PushSettings(_settingsConfigurator);
try
{
- var context = BsonSerializationContext.CreateRoot(Wrapped);
+ var context = BsonSerializationContext.CreateRoot(Wrapped, BsonSerializer.DefaultSerializationDomain);
foreach (var element in _elements)
{
Wrapped.WriteName(element.Name);
diff --git a/src/MongoDB.Bson/IO/IBsonReader.cs b/src/MongoDB.Bson/IO/IBsonReader.cs
index 14af4722a33..9cf7e26f22f 100644
--- a/src/MongoDB.Bson/IO/IBsonReader.cs
+++ b/src/MongoDB.Bson/IO/IBsonReader.cs
@@ -17,6 +17,8 @@
namespace MongoDB.Bson.IO
{
+ //DOMAIN-API This interface should have the setting property as well probably., same way it's done for thr writer.
+ //Even if we don't need it now, it could be needed in the future.
///
/// Represents a BSON reader.
///
diff --git a/src/MongoDB.Bson/InternalExtensions.cs b/src/MongoDB.Bson/InternalExtensions.cs
new file mode 100644
index 00000000000..1df207a684d
--- /dev/null
+++ b/src/MongoDB.Bson/InternalExtensions.cs
@@ -0,0 +1,107 @@
+/* Copyright 2010-present MongoDB Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using MongoDB.Bson.IO;
+using MongoDB.Bson.Serialization;
+using MongoDB.Bson.Serialization.Conventions;
+
+namespace MongoDB.Bson
+{
+ //FP This could be moved somewhere else, and maybe reordered.
+ internal static class InternalExtensions
+ {
+ #region IBsonIdProvider
+
+ public static bool GetDocumentIdInternal(this IBsonIdProvider provider, object document, IBsonSerializationDomain serializationDomain, out object id,
+ out Type idNominalType, out IIdGenerator idGenerator)
+ {
+ if (provider is IBsonIdProviderInternal internalProvider)
+ {
+ return internalProvider.GetDocumentId(document, serializationDomain, out id, out idNominalType, out idGenerator);
+ }
+ return provider.GetDocumentId(document, out id, out idNominalType, out idGenerator);
+ }
+
+ #endregion
+
+ #region IDiscriminatorConvention
+
+ public static Type GetActualTypeInternal(this IDiscriminatorConvention discriminatorConvention, IBsonReader bsonReader, Type nominalType, IBsonSerializationDomain serializationDomain)
+ {
+ if (discriminatorConvention is IDiscriminatorConventionInternal internalConvention)
+ {
+ return internalConvention.GetActualType(bsonReader, nominalType, serializationDomain);
+ }
+ return discriminatorConvention.GetActualType(bsonReader, nominalType);
+ }
+
+ public static BsonValue GetDiscriminatorInternal(this IDiscriminatorConvention discriminatorConvention, Type nominalType, Type actualType, IBsonSerializationDomain serializationDomain)
+ {
+ if (discriminatorConvention is IDiscriminatorConventionInternal internalConvention)
+ {
+ return internalConvention.GetDiscriminator(nominalType, actualType, serializationDomain);
+ }
+ return discriminatorConvention.GetDiscriminator(nominalType, actualType);
+ }
+
+ #endregion
+
+ #region IScalarDiscriminatorConvention
+
+ public static BsonValue[] GetDiscriminatorsForTypeAndSubTypesInternal(this IScalarDiscriminatorConvention discriminatorConvention, Type type, IBsonSerializationDomain serializationDomain)
+ {
+ if (discriminatorConvention is IScalarDiscriminatorConventionInternal internalConvention)
+ {
+ return internalConvention.GetDiscriminatorsForTypeAndSubTypes(type, serializationDomain);
+ }
+ return discriminatorConvention.GetDiscriminatorsForTypeAndSubTypes(type);
+ }
+
+ #endregion
+
+ #region IMemberMapConvention
+
+ public static void ApplyInternal(this IMemberMapConvention memberMapConvention, BsonMemberMap memberMap, IBsonSerializationDomain serializationDomain)
+ {
+ if (memberMapConvention is IMemberMapConventionInternal internalConvention)
+ {
+ internalConvention.Apply(memberMap, serializationDomain);
+ }
+ else
+ {
+ memberMapConvention.Apply(memberMap);
+ }
+ }
+
+ #endregion
+
+ #region IPostProcessingConvention
+
+ public static void PostProcessInternal(this IPostProcessingConvention postProcessingConvention, BsonClassMap classMap, IBsonSerializationDomain serializationDomain)
+ {
+ if (postProcessingConvention is IPostProcessingConventionInternal internalConvention)
+ {
+ internalConvention.PostProcess(classMap, serializationDomain);
+ }
+ else
+ {
+ postProcessingConvention.PostProcess(classMap);
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/MongoDB.Bson/ObjectModel/BsonDocument.cs b/src/MongoDB.Bson/ObjectModel/BsonDocument.cs
index 535bb541b62..f4ffd777487 100644
--- a/src/MongoDB.Bson/ObjectModel/BsonDocument.cs
+++ b/src/MongoDB.Bson/ObjectModel/BsonDocument.cs
@@ -331,7 +331,7 @@ public static BsonDocument Parse(string json)
{
using (var jsonReader = new JsonReader(json))
{
- var context = BsonDeserializationContext.CreateRoot(jsonReader);
+ var context = BsonDeserializationContext.CreateRoot(jsonReader, BsonSerializer.DefaultSerializationDomain);
var document = BsonDocumentSerializer.Instance.Deserialize(context);
if (!jsonReader.IsAtEndOfFile())
{
diff --git a/src/MongoDB.Bson/ObjectModel/BsonDocumentWrapper.cs b/src/MongoDB.Bson/ObjectModel/BsonDocumentWrapper.cs
index 09edc32dbfa..1d5dfd3f9a6 100644
--- a/src/MongoDB.Bson/ObjectModel/BsonDocumentWrapper.cs
+++ b/src/MongoDB.Bson/ObjectModel/BsonDocumentWrapper.cs
@@ -37,6 +37,7 @@ public class BsonDocumentWrapper : MaterializedOnDemandBsonDocument
// private fields
private readonly object _wrapped;
private readonly IBsonSerializer _serializer;
+ private readonly IBsonSerializationDomain _serializationDomain;
// constructors
///
@@ -44,7 +45,7 @@ public class BsonDocumentWrapper : MaterializedOnDemandBsonDocument
///
/// The value.
public BsonDocumentWrapper(object value)
- : this(value, UndiscriminatedActualTypeSerializer