@@ -62,13 +62,17 @@ private Expression BindKey(PipelineExpression pipeline, PipelineBindingContext b
62
62
63
63
private Expression BuildProjector ( PipelineBindingContext bindingContext , Expression idSelector , Expression elementSelector )
64
64
{
65
+ var elementSerializer = bindingContext . GetSerializer ( elementSelector . Type , elementSelector ) ;
66
+ var elementFieldName = ( elementSelector as IFieldExpression ) ? . FieldName ;
67
+
65
68
var serializerType = typeof ( GroupingDeserializer < , > ) . MakeGenericType (
66
69
idSelector . Type ,
67
70
elementSelector . Type ) ;
68
71
var serializer = ( IBsonSerializer ) Activator . CreateInstance (
69
72
serializerType ,
70
73
bindingContext . GetSerializer ( idSelector . Type , idSelector ) ,
71
- bindingContext . GetSerializer ( elementSelector . Type , elementSelector ) ) ;
74
+ bindingContext . GetSerializer ( elementSelector . Type , elementSelector ) ,
75
+ elementFieldName ) ;
72
76
73
77
return new DocumentExpression ( serializer ) ;
74
78
}
@@ -100,13 +104,15 @@ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
100
104
101
105
private class GroupingDeserializer < TKey , TElement > : SerializerBase < IGrouping < TKey , TElement > > , IBsonDocumentSerializer , IBsonArraySerializer
102
106
{
107
+ private readonly string _elementFieldName ;
103
108
private readonly IBsonSerializer _elementSerializer ;
104
109
private readonly IBsonSerializer _idSerializer ;
105
110
106
- public GroupingDeserializer ( IBsonSerializer idSerializer , IBsonSerializer elementSerializer )
111
+ public GroupingDeserializer ( IBsonSerializer idSerializer , IBsonSerializer elementSerializer , string elementFieldName )
107
112
{
108
113
_idSerializer = idSerializer ;
109
114
_elementSerializer = elementSerializer ;
115
+ _elementFieldName = elementFieldName ;
110
116
}
111
117
112
118
public override IGrouping < TKey , TElement > Deserialize ( BsonDeserializationContext context , BsonDeserializationArgs args )
@@ -144,7 +150,7 @@ public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializati
144
150
145
151
public bool TryGetItemSerializationInfo ( out BsonSerializationInfo serializationInfo )
146
152
{
147
- serializationInfo = new BsonSerializationInfo ( null , _elementSerializer , typeof ( TElement ) ) ;
153
+ serializationInfo = new BsonSerializationInfo ( _elementFieldName , _elementSerializer , typeof ( TElement ) ) ;
148
154
return true ;
149
155
}
150
156
}
0 commit comments