Skip to content

Commit 6352f0e

Browse files
author
rstam
committed
Serialize RawBsonArray and RawBsonDocument more efficiently when embedded in another BsonArray or BsonDocument.
1 parent 9ea5ee2 commit 6352f0e

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

MongoDB.Bson/Serialization/Serializers/BsonArraySerializer.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ public override void Serialize(
113113
throw new ArgumentNullException("value");
114114
}
115115

116+
var rawBsonArray = value as RawBsonArray;
117+
if (rawBsonArray != null)
118+
{
119+
RawBsonArraySerializer.Instance.Serialize(bsonWriter, nominalType, value, options);
120+
return;
121+
}
122+
116123
var array = (BsonArray)value;
117124
bsonWriter.WriteStartArray();
118125
for (int i = 0; i < array.Count; i++)

MongoDB.Bson/Serialization/Serializers/BsonDocumentSerializer.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,13 @@ public override void Serialize(
179179
return;
180180
}
181181

182+
var rawBsonDocument = value as RawBsonDocument;
183+
if (rawBsonDocument != null)
184+
{
185+
RawBsonDocumentSerializer.Instance.Serialize(bsonWriter, nominalType, value, options);
186+
return;
187+
}
188+
182189
var bsonDocument = (BsonDocument)value;
183190
var documentSerializationOptions = (options ?? DocumentSerializationOptions.Defaults) as DocumentSerializationOptions;
184191
if (documentSerializationOptions == null)

MongoDB.Bson/Serialization/Serializers/RawBsonArraySerializer.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,18 @@ namespace MongoDB.Bson.Serialization.Serializers
2424
/// </summary>
2525
public class RawBsonArraySerializer : BsonBaseSerializer
2626
{
27+
// private static fields
28+
private static readonly RawBsonArraySerializer __instance = new RawBsonArraySerializer();
29+
30+
// public static properties
31+
/// <summary>
32+
/// Gets an instance of the RawBsonArraySerializer class.
33+
/// </summary>
34+
public static RawBsonArraySerializer Instance
35+
{
36+
get { return __instance; }
37+
}
38+
2739
// public methods
2840
/// <summary>
2941
/// Deserializes an object from a BsonReader.

MongoDB.Bson/Serialization/Serializers/RawBsonDocumentSerializer.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,18 @@ namespace MongoDB.Bson.Serialization.Serializers
2424
/// </summary>
2525
public class RawBsonDocumentSerializer : BsonBaseSerializer
2626
{
27+
// private static fields
28+
private static readonly RawBsonDocumentSerializer __instance = new RawBsonDocumentSerializer();
29+
30+
// public static properties
31+
/// <summary>
32+
/// Gets an instance of the RawBsonDocumentSerializer class.
33+
/// </summary>
34+
public static RawBsonDocumentSerializer Instance
35+
{
36+
get { return __instance; }
37+
}
38+
2739
// public methods
2840
/// <summary>
2941
/// Deserializes an object from a BsonReader.

0 commit comments

Comments
 (0)