@@ -462,62 +462,59 @@ private void AutoMapMembers() {
462
462
private BsonMemberMap AutoMapMember (
463
463
MemberInfo memberInfo
464
464
) {
465
- var elementName = conventions . ElementNameConvention . GetElementName ( memberInfo ) ;
466
- var order = int . MaxValue ;
467
- IBsonIdGenerator idGenerator = null ;
468
-
469
- var idAttribute = ( BsonIdAttribute ) memberInfo . GetCustomAttributes ( typeof ( BsonIdAttribute ) , false ) . FirstOrDefault ( ) ;
470
- if ( idAttribute != null ) {
471
- elementName = "_id" ; // if BsonIdAttribute is present ignore BsonElementAttribute
472
- var idGeneratorType = idAttribute . IdGenerator ;
473
- if ( idGeneratorType != null ) {
474
- idGenerator = ( IBsonIdGenerator ) Activator . CreateInstance ( idGeneratorType ) ;
465
+ var memberMap = MapMember ( memberInfo ) ;
466
+
467
+ memberMap . SetElementName ( conventions . ElementNameConvention . GetElementName ( memberInfo ) ) ;
468
+ memberMap . SetIgnoreIfNull ( conventions . IgnoreIfNullConvention . IgnoreIfNull ( memberInfo ) ) ;
469
+ memberMap . SetSerializeDefaultValue ( conventions . SerializeDefaultValueConvention . SerializeDefaultValue ( memberInfo ) ) ;
470
+
471
+ var defaultValue = conventions . DefaultValueConvention . GetDefaultValue ( memberInfo ) ;
472
+ if ( defaultValue != null ) {
473
+ memberMap . SetDefaultValue ( defaultValue ) ;
474
+ }
475
+
476
+ foreach ( var attribute in memberInfo . GetCustomAttributes ( false ) ) {
477
+ var defaultValueAttribute = attribute as BsonDefaultValueAttribute ;
478
+ if ( defaultValueAttribute != null ) {
479
+ memberMap . SetDefaultValue ( defaultValueAttribute . DefaultValue ) ;
480
+ memberMap . SetSerializeDefaultValue ( defaultValueAttribute . SerializeDefaultValue ) ;
475
481
}
476
- } else {
477
- var elementAttribute = ( BsonElementAttribute ) memberInfo . GetCustomAttributes ( typeof ( BsonElementAttribute ) , false ) . FirstOrDefault ( ) ;
482
+
483
+ var elementAttribute = attribute as BsonElementAttribute ;
478
484
if ( elementAttribute != null ) {
479
- elementName = elementAttribute . ElementName ;
480
- order = elementAttribute . Order ;
485
+ memberMap . SetElementName ( elementAttribute . ElementName ) ;
486
+ memberMap . SetOrder ( elementAttribute . Order ) ;
487
+ continue ;
481
488
}
482
- }
483
489
484
- var memberMap = MapMember ( memberInfo ) ;
485
- memberMap . SetElementName ( elementName ) ;
486
- if ( order != int . MaxValue ) {
487
- memberMap . SetOrder ( order ) ;
488
- }
489
- if ( idAttribute != null ) {
490
- memberMap . SetIdGenerator ( idGenerator ) ;
491
- SetIdMember ( memberMap ) ;
492
- }
493
-
494
- var defaultValueAttribute = ( BsonDefaultValueAttribute ) memberInfo . GetCustomAttributes ( typeof ( BsonDefaultValueAttribute ) , false ) . FirstOrDefault ( ) ;
495
- if ( defaultValueAttribute != null ) {
496
- memberMap . SetDefaultValue ( defaultValueAttribute . DefaultValue ) ;
497
- memberMap . SetSerializeDefaultValue ( defaultValueAttribute . SerializeDefaultValue ) ;
498
- } else {
499
- var defaultValue = conventions . DefaultValueConvention . GetDefaultValue ( memberMap . MemberInfo ) ;
500
- if ( defaultValue != null ) {
501
- memberMap . SetDefaultValue ( defaultValue ) ;
490
+ var idAttribute = attribute as BsonIdAttribute ;
491
+ if ( idAttribute != null ) {
492
+ memberMap . SetElementName ( "_id" ) ;
493
+ memberMap . SetOrder ( idAttribute . Order ) ;
494
+ var idGeneratorType = idAttribute . IdGenerator ;
495
+ if ( idGeneratorType != null ) {
496
+ var idGenerator = ( IBsonIdGenerator ) Activator . CreateInstance ( idGeneratorType ) ;
497
+ memberMap . SetIdGenerator ( idGenerator ) ;
498
+ }
499
+ SetIdMember ( memberMap ) ;
500
+ continue ;
502
501
}
503
- memberMap . SetSerializeDefaultValue ( conventions . SerializeDefaultValueConvention . SerializeDefaultValue ( memberMap . MemberInfo ) ) ;
504
- }
505
502
506
- var ignoreIfNullAttribute = ( BsonIgnoreIfNullAttribute ) memberInfo . GetCustomAttributes ( typeof ( BsonIgnoreIfNullAttribute ) , false ) . FirstOrDefault ( ) ;
507
- if ( ignoreIfNullAttribute != null ) {
508
- memberMap . SetIgnoreIfNull ( true ) ;
509
- } else {
510
- memberMap . SetIgnoreIfNull ( conventions . IgnoreIfNullConvention . IgnoreIfNull ( memberMap . MemberInfo ) ) ;
511
- }
503
+ var ignoreIfNullAttribute = attribute as BsonIgnoreIfNullAttribute ;
504
+ if ( ignoreIfNullAttribute != null ) {
505
+ memberMap . SetIgnoreIfNull ( true ) ;
506
+ }
512
507
513
- var requiredAttribute = ( BsonRequiredAttribute ) memberInfo . GetCustomAttributes ( typeof ( BsonRequiredAttribute ) , false ) . FirstOrDefault ( ) ;
514
- if ( requiredAttribute != null ) {
515
- memberMap . SetIsRequired ( true ) ;
516
- }
508
+ var requiredAttribute = attribute as BsonRequiredAttribute ;
509
+ if ( requiredAttribute != null ) {
510
+ memberMap . SetIsRequired ( true ) ;
511
+ }
517
512
518
- var representationAttribute = ( BsonRepresentationAttribute ) memberInfo . GetCustomAttributes ( typeof ( BsonRepresentationAttribute ) , false ) . FirstOrDefault ( ) ;
519
- if ( representationAttribute != null ) {
520
- memberMap . SetSerializationOptions ( representationAttribute . Representation ) ;
513
+ // note: this handles subclasses of BsonSerializationOptionsAttribute also
514
+ var serializationOptionsAttribute = attribute as BsonSerializationOptionsAttribute ;
515
+ if ( serializationOptionsAttribute != null ) {
516
+ memberMap . SetSerializationOptions ( serializationOptionsAttribute . GetOptions ( ) ) ;
517
+ }
521
518
}
522
519
523
520
return memberMap ;
0 commit comments