Skip to content

Commit f9c63a9

Browse files
committed
Work in progress.
1 parent 02150af commit f9c63a9

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

src/MongoDB.Driver/Linq/Linq3Implementation/KnownSerializerFinders/KnownSerializerFinderHelperMethods.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,22 @@ private void DeduceBooleanSerializer(Expression node)
108108
}
109109
}
110110

111+
private void DeduceBsonDocumentSerializer(Expression node)
112+
{
113+
if (IsNotKnown(node))
114+
{
115+
AddKnownSerializer(node, BsonDocumentSerializer.Instance);
116+
}
117+
}
118+
119+
private void DeduceBsonValueSerializer(Expression node)
120+
{
121+
if (IsNotKnown(node))
122+
{
123+
AddKnownSerializer(node, BsonValueSerializer.Instance);
124+
}
125+
}
126+
111127
private void DeduceCollectionAndCollectionSerializers(Expression collectionExpression1, Expression collectionExpression2)
112128
{
113129
IBsonSerializer collectionSerializer1;

src/MongoDB.Driver/Linq/Linq3Implementation/KnownSerializerFinders/KnownSerializerFinderVisitNew.cs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)