@@ -57,6 +57,8 @@ public override object Deserialize(
57
57
IBsonSerializationOptions options )
58
58
{
59
59
VerifyTypes ( nominalType , actualType , typeof ( T [ ] ) ) ;
60
+ var arraySerializationOptions = EnsureSerializationOptions < ArraySerializationOptions > ( options ) ;
61
+ var itemSerializationOptions = arraySerializationOptions . ItemSerializationOptions ;
60
62
61
63
var bsonType = bsonReader . GetCurrentBsonType ( ) ;
62
64
switch ( bsonType )
@@ -66,10 +68,13 @@ public override object Deserialize(
66
68
return null ;
67
69
case BsonType . Array :
68
70
bsonReader . ReadStartArray ( ) ;
71
+ var discriminatorConvention = BsonSerializer . LookupDiscriminatorConvention ( typeof ( T ) ) ;
69
72
var list = new List < T > ( ) ;
70
73
while ( bsonReader . ReadBsonType ( ) != BsonType . EndOfDocument )
71
74
{
72
- var element = BsonSerializer . Deserialize < T > ( bsonReader ) ;
75
+ var elementType = discriminatorConvention . GetActualType ( bsonReader , typeof ( T ) ) ;
76
+ var serializer = BsonSerializer . LookupSerializer ( elementType ) ;
77
+ var element = ( T ) serializer . Deserialize ( bsonReader , typeof ( T ) , elementType , itemSerializationOptions ) ;
73
78
list . Add ( element ) ;
74
79
}
75
80
bsonReader . ReadEndArray ( ) ;
@@ -177,6 +182,8 @@ public override object Deserialize(
177
182
IBsonSerializationOptions options )
178
183
{
179
184
VerifyTypes ( nominalType , actualType , typeof ( T [ , ] ) ) ;
185
+ var arraySerializationOptions = EnsureSerializationOptions < ArraySerializationOptions > ( options ) ;
186
+ var itemSerializationOptions = arraySerializationOptions . ItemSerializationOptions ;
180
187
181
188
var bsonType = bsonReader . GetCurrentBsonType ( ) ;
182
189
string message ;
@@ -187,14 +194,17 @@ public override object Deserialize(
187
194
return null ;
188
195
case BsonType . Array :
189
196
bsonReader . ReadStartArray ( ) ;
197
+ var discriminatorConvention = BsonSerializer . LookupDiscriminatorConvention ( typeof ( T ) ) ;
190
198
var outerList = new List < List < T > > ( ) ;
191
199
while ( bsonReader . ReadBsonType ( ) != BsonType . EndOfDocument )
192
200
{
193
201
bsonReader . ReadStartArray ( ) ;
194
202
var innerList = new List < T > ( ) ;
195
203
while ( bsonReader . ReadBsonType ( ) != BsonType . EndOfDocument )
196
204
{
197
- var element = BsonSerializer . Deserialize < T > ( bsonReader ) ;
205
+ var elementType = discriminatorConvention . GetActualType ( bsonReader , typeof ( T ) ) ;
206
+ var serializer = BsonSerializer . LookupSerializer ( elementType ) ;
207
+ var element = ( T ) serializer . Deserialize ( bsonReader , typeof ( T ) , elementType , itemSerializationOptions ) ;
198
208
innerList . Add ( element ) ;
199
209
}
200
210
bsonReader . ReadEndArray ( ) ;
@@ -317,6 +327,8 @@ public override object Deserialize(
317
327
IBsonSerializationOptions options )
318
328
{
319
329
VerifyTypes ( nominalType , actualType , typeof ( T [ , , ] ) ) ;
330
+ var arraySerializationOptions = EnsureSerializationOptions < ArraySerializationOptions > ( options ) ;
331
+ var itemSerializationOptions = arraySerializationOptions . ItemSerializationOptions ;
320
332
321
333
var bsonType = bsonReader . GetCurrentBsonType ( ) ;
322
334
string message ;
@@ -327,6 +339,7 @@ public override object Deserialize(
327
339
return null ;
328
340
case BsonType . Array :
329
341
bsonReader . ReadStartArray ( ) ;
342
+ var discriminatorConvention = BsonSerializer . LookupDiscriminatorConvention ( typeof ( T ) ) ;
330
343
var outerList = new List < List < List < T > > > ( ) ;
331
344
while ( bsonReader . ReadBsonType ( ) != BsonType . EndOfDocument )
332
345
{
@@ -338,7 +351,9 @@ public override object Deserialize(
338
351
var innerList = new List < T > ( ) ;
339
352
while ( bsonReader . ReadBsonType ( ) != BsonType . EndOfDocument )
340
353
{
341
- var element = BsonSerializer . Deserialize < T > ( bsonReader ) ;
354
+ var elementType = discriminatorConvention . GetActualType ( bsonReader , typeof ( T ) ) ;
355
+ var serializer = BsonSerializer . LookupSerializer ( elementType ) ;
356
+ var element = ( T ) serializer . Deserialize ( bsonReader , typeof ( T ) , elementType , itemSerializationOptions ) ;
342
357
innerList . Add ( element ) ;
343
358
}
344
359
bsonReader . ReadEndArray ( ) ;
0 commit comments