@@ -62,13 +62,17 @@ private Expression BindKey(PipelineExpression pipeline, PipelineBindingContext b
6262
6363 private Expression BuildProjector ( PipelineBindingContext bindingContext , Expression idSelector , Expression elementSelector )
6464 {
65+ var elementSerializer = bindingContext . GetSerializer ( elementSelector . Type , elementSelector ) ;
66+ var elementFieldName = ( elementSelector as IFieldExpression ) ? . FieldName ;
67+
6568 var serializerType = typeof ( GroupingDeserializer < , > ) . MakeGenericType (
6669 idSelector . Type ,
6770 elementSelector . Type ) ;
6871 var serializer = ( IBsonSerializer ) Activator . CreateInstance (
6972 serializerType ,
7073 bindingContext . GetSerializer ( idSelector . Type , idSelector ) ,
71- bindingContext . GetSerializer ( elementSelector . Type , elementSelector ) ) ;
74+ bindingContext . GetSerializer ( elementSelector . Type , elementSelector ) ,
75+ elementFieldName ) ;
7276
7377 return new DocumentExpression ( serializer ) ;
7478 }
@@ -100,13 +104,15 @@ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
100104
101105 private class GroupingDeserializer < TKey , TElement > : SerializerBase < IGrouping < TKey , TElement > > , IBsonDocumentSerializer , IBsonArraySerializer
102106 {
107+ private readonly string _elementFieldName ;
103108 private readonly IBsonSerializer _elementSerializer ;
104109 private readonly IBsonSerializer _idSerializer ;
105110
106- public GroupingDeserializer ( IBsonSerializer idSerializer , IBsonSerializer elementSerializer )
111+ public GroupingDeserializer ( IBsonSerializer idSerializer , IBsonSerializer elementSerializer , string elementFieldName )
107112 {
108113 _idSerializer = idSerializer ;
109114 _elementSerializer = elementSerializer ;
115+ _elementFieldName = elementFieldName ;
110116 }
111117
112118 public override IGrouping < TKey , TElement > Deserialize ( BsonDeserializationContext context , BsonDeserializationArgs args )
@@ -144,7 +150,7 @@ public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializati
144150
145151 public bool TryGetItemSerializationInfo ( out BsonSerializationInfo serializationInfo )
146152 {
147- serializationInfo = new BsonSerializationInfo ( null , _elementSerializer , typeof ( TElement ) ) ;
153+ serializationInfo = new BsonSerializationInfo ( _elementFieldName , _elementSerializer , typeof ( TElement ) ) ;
148154 return true ;
149155 }
150156 }
0 commit comments