@@ -35,16 +35,27 @@ protected override Expression VisitNew(NewExpression node)
3535 if ( IsKnown ( node , out var nodeSerializer ) &&
3636 arguments . Any ( IsNotKnown ) )
3737 {
38- var matchingMemberSerializationInfos = nodeSerializer . GetMatchingMemberSerializationInfosForConstructorParameters ( node , node . Constructor ) ;
39- for ( var i = 0 ; i < matchingMemberSerializationInfos . Count ; i ++ )
38+ if ( constructor == BsonDocumentConstructor . WithNameAndValue )
4039 {
41- var argument = arguments [ i ] ;
42- var matchingMemberSerializationInfo = matchingMemberSerializationInfos [ i ] ;
43-
44- if ( IsNotKnown ( argument ) )
40+ var nameExpression = arguments [ 0 ] ;
41+ var valueExpression = arguments [ 1 ] ;
42+ DeduceStringSerializer ( nameExpression ) ;
43+ DeduceBsonValueSerializer ( valueExpression ) ;
44+ DeduceBsonDocumentSerializer ( node ) ;
45+ }
46+ else
47+ {
48+ var matchingMemberSerializationInfos = nodeSerializer . GetMatchingMemberSerializationInfosForConstructorParameters ( node , node . Constructor ) ;
49+ for ( var i = 0 ; i < matchingMemberSerializationInfos . Count ; i ++ )
4550 {
46- // arg => arg: matchingMemberSerializer
47- AddKnownSerializer ( argument , matchingMemberSerializationInfo . Serializer ) ;
51+ var argument = arguments [ i ] ;
52+ var matchingMemberSerializationInfo = matchingMemberSerializationInfos [ i ] ;
53+
54+ if ( IsNotKnown ( argument ) )
55+ {
56+ // arg => arg: matchingMemberSerializer
57+ AddKnownSerializer ( argument , matchingMemberSerializationInfo . Serializer ) ;
58+ }
4859 }
4960 }
5061 }
0 commit comments