Skip to content

Commit bcaae31

Browse files
committed
removed GetMemberSerializationInfo from IBsonDocumentSerializer and replaced it with TryGetMemberSerializationInfo.
1 parent 93074a9 commit bcaae31

13 files changed

+43
-167
lines changed

src/MongoDB.Bson/Serialization/BsonDocumentBackedClass.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,12 @@ protected internal BsonDocument BackingDocument
7474
/// <returns>The value.</returns>
7575
protected T GetValue<T>(string memberName, T defaultValue)
7676
{
77-
var info = _serializer.GetMemberSerializationInfo(memberName);
77+
BsonSerializationInfo info;
78+
if (!_serializer.TryGetMemberSerializationInfo(memberName, out info))
79+
{
80+
var message = string.Format("The member {0} does not exist.", memberName);
81+
throw new ArgumentOutOfRangeException("memberName", message);
82+
}
7883

7984
BsonValue bsonValue;
8085
if (!_backingDocument.TryGetValue(info.ElementName, out bsonValue))
@@ -92,7 +97,13 @@ protected T GetValue<T>(string memberName, T defaultValue)
9297
/// <param name="value">The value.</param>
9398
protected void SetValue(string memberName, object value)
9499
{
95-
var info = _serializer.GetMemberSerializationInfo(memberName);
100+
BsonSerializationInfo info;
101+
if (!_serializer.TryGetMemberSerializationInfo(memberName, out info))
102+
{
103+
var message = string.Format("The member {0} does not exist.", memberName);
104+
throw new ArgumentOutOfRangeException("memberName", message);
105+
}
106+
96107
var bsonValue = info.SerializeValue(value);
97108
_backingDocument.Set(info.ElementName, bsonValue);
98109
}

src/MongoDB.Bson/Serialization/IBsonDocumentSerializer.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,6 @@ namespace MongoDB.Bson.Serialization
2121
/// </summary>
2222
public interface IBsonDocumentSerializer : IBsonSerializer
2323
{
24-
/// <summary>
25-
/// Gets the serialization info for a member.
26-
/// </summary>
27-
/// <param name="memberName">The member name.</param>
28-
/// <returns>The serialization info for the member.</returns>
29-
BsonSerializationInfo GetMemberSerializationInfo(string memberName);
30-
3124
/// <summary>
3225
/// Tries to get the serialization info for a member.
3326
/// </summary>

src/MongoDB.Bson/Serialization/Serializers/BsonClassMapSerializer.cs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -302,26 +302,6 @@ public bool GetDocumentId(
302302
}
303303
}
304304

305-
/// <summary>
306-
/// Gets the serialization info for a member.
307-
/// </summary>
308-
/// <param name="memberName">The member name.</param>
309-
/// <returns>The serialization info for the member.</returns>
310-
public BsonSerializationInfo GetMemberSerializationInfo(string memberName)
311-
{
312-
BsonSerializationInfo serializationInfo;
313-
if (!TryGetMemberSerializationInfo(memberName, out serializationInfo))
314-
{
315-
var message = string.Format(
316-
"Class {0} does not have a member called {1}.",
317-
BsonUtils.GetFriendlyTypeName(_classMap.ClassType),
318-
memberName);
319-
throw new ArgumentOutOfRangeException("memberName", message);
320-
}
321-
322-
return serializationInfo;
323-
}
324-
325305
/// <summary>
326306
/// Tries to get the serialization info for a member.
327307
/// </summary>

src/MongoDB.Bson/Serialization/Serializers/BsonDocumentBackedClassSerializer.cs

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -51,25 +51,6 @@ public override TClass Deserialize(BsonDeserializationContext context, BsonDeser
5151
return CreateInstance(backingDocument);
5252
}
5353

54-
/// <summary>
55-
/// Gets the serialization info for a member.
56-
/// </summary>
57-
/// <param name="memberName">The member name.</param>
58-
/// <returns>
59-
/// The serialization info for the member.
60-
/// </returns>
61-
public virtual BsonSerializationInfo GetMemberSerializationInfo(string memberName)
62-
{
63-
BsonSerializationInfo info;
64-
if (!_memberSerializationInfo.TryGetValue(memberName, out info))
65-
{
66-
var message = string.Format("{0} is not a member of {1}.", memberName, typeof(TClass));
67-
throw new ArgumentOutOfRangeException("memberName", message);
68-
}
69-
70-
return info;
71-
}
72-
7354
/// <summary>
7455
/// Tries to get the serialization info for a member.
7556
/// </summary>
@@ -78,7 +59,7 @@ public virtual BsonSerializationInfo GetMemberSerializationInfo(string memberNam
7859
/// <returns>
7960
/// <c>true</c> if the serialization info exists; otherwise <c>false</c>.
8061
/// </returns>
81-
public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo)
62+
public virtual bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo)
8263
{
8364
return _memberSerializationInfo.TryGetValue(memberName, out serializationInfo);
8465
}

src/MongoDB.Bson/Serialization/Serializers/BsonDocumentSerializer.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -112,21 +112,6 @@ public bool GetDocumentId(
112112
return true;
113113
}
114114

115-
/// <summary>
116-
/// Gets the serialization info for a member.
117-
/// </summary>
118-
/// <param name="memberName">The member name.</param>
119-
/// <returns>
120-
/// The serialization info for the member.
121-
/// </returns>
122-
public BsonSerializationInfo GetMemberSerializationInfo(string memberName)
123-
{
124-
return new BsonSerializationInfo(
125-
memberName,
126-
BsonValueSerializer.Instance,
127-
typeof(BsonValue));
128-
}
129-
130115
/// <summary>
131116
/// Tries to get the serialization info for a member.
132117
/// </summary>
@@ -137,7 +122,10 @@ public BsonSerializationInfo GetMemberSerializationInfo(string memberName)
137122
/// </returns>
138123
public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo)
139124
{
140-
serializationInfo = GetMemberSerializationInfo(memberName);
125+
serializationInfo = new BsonSerializationInfo(
126+
memberName,
127+
BsonValueSerializer.Instance,
128+
typeof(BsonValue));
141129
return true;
142130
}
143131

src/MongoDB.Bson/Serialization/Serializers/BsonValueCSharpNullSerializer.cs

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -143,18 +143,6 @@ public BsonSerializationInfo GetItemSerializationInfo()
143143
return BsonValueSerializer.Instance.GetItemSerializationInfo();
144144
}
145145

146-
/// <summary>
147-
/// Gets the serialization info for a member.
148-
/// </summary>
149-
/// <param name="memberName">The member name.</param>
150-
/// <returns>
151-
/// The serialization info for the member.
152-
/// </returns>
153-
public BsonSerializationInfo GetMemberSerializationInfo(string memberName)
154-
{
155-
return BsonValueSerializer.Instance.GetMemberSerializationInfo(memberName);
156-
}
157-
158146
/// <summary>
159147
/// Tries to get the serialization info for a member.
160148
/// </summary>
@@ -215,18 +203,6 @@ public BsonValueCSharpNullDocumentSerializer(IBsonSerializer<TBsonValue> wrapped
215203
{
216204
}
217205

218-
/// <summary>
219-
/// Gets the serialization info for a member.
220-
/// </summary>
221-
/// <param name="memberName">The member name.</param>
222-
/// <returns>
223-
/// The serialization info for the member.
224-
/// </returns>
225-
public BsonSerializationInfo GetMemberSerializationInfo(string memberName)
226-
{
227-
return BsonValueSerializer.Instance.GetMemberSerializationInfo(memberName);
228-
}
229-
230206
/// <summary>
231207
/// Tries to get the serialization info for a member.
232208
/// </summary>

src/MongoDB.Bson/Serialization/Serializers/BsonValueSerializer.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,6 @@ protected override BsonValue DeserializeValue(BsonDeserializationContext context
8484
}
8585
}
8686

87-
/// <summary>
88-
/// Gets the serialization info for a member.
89-
/// </summary>
90-
/// <param name="memberName">The member name.</param>
91-
/// <returns>
92-
/// The serialization info for the member.
93-
/// </returns>
94-
public BsonSerializationInfo GetMemberSerializationInfo(string memberName)
95-
{
96-
return new BsonSerializationInfo(
97-
memberName,
98-
BsonValueSerializer.Instance,
99-
typeof(BsonValue));
100-
}
101-
10287
/// <summary>
10388
/// Tries to get the serialization info for a member.
10489
/// </summary>
@@ -109,7 +94,10 @@ public BsonSerializationInfo GetMemberSerializationInfo(string memberName)
10994
/// </returns>
11095
public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo)
11196
{
112-
serializationInfo = GetMemberSerializationInfo(memberName);
97+
serializationInfo = new BsonSerializationInfo(
98+
memberName,
99+
BsonValueSerializer.Instance,
100+
typeof(BsonValue));
113101
return true;
114102
}
115103

src/MongoDB.Bson/Serialization/Serializers/ImpliedImplementationInterfaceSerializer.cs

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -184,25 +184,6 @@ public BsonSerializationInfo GetItemSerializationInfo()
184184
return null;
185185
}
186186

187-
/// <summary>
188-
/// Gets the serialization info for a member.
189-
/// </summary>
190-
/// <param name="memberName">The member name.</param>
191-
/// <returns>
192-
/// The serialization info for the member.
193-
/// </returns>
194-
public BsonSerializationInfo GetMemberSerializationInfo(string memberName)
195-
{
196-
BsonSerializationInfo serializationInfo;
197-
if (!TryGetMemberSerializationInfo(memberName, out serializationInfo))
198-
{
199-
var message = string.Format("{0} is not a member of {1}.", memberName, typeof(TImplementation));
200-
throw new ArgumentOutOfRangeException("memberName", message);
201-
}
202-
203-
return serializationInfo;
204-
}
205-
206187
/// <summary>
207188
/// Tries to get the serialization info for a member.
208189
/// </summary>

src/MongoDB.Driver.Legacy.Tests/Linq/BsonDocumentBackedClassSerializerTests.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void TestIndexerOnArray()
9191
[Test]
9292
public void TestThrowsExceptionWhenMemberDoesNotExistAndIsNotDynamic()
9393
{
94-
Assert.Throws<ArgumentOutOfRangeException>(() => Query<TestDocument>.Where(x => x["ThrowMe"] == 42));
94+
Assert.Throws<NotSupportedException>(() => Query<TestDocument>.Where(x => x["ThrowMe"] == 42));
9595
}
9696

9797
public enum KnownPropertyNames
@@ -117,7 +117,7 @@ public BsonValue this[KnownPropertyNames name]
117117
{
118118
get
119119
{
120-
switch(name)
120+
switch (name)
121121
{
122122
case KnownPropertyNames.Name:
123123
return this["Name"];
@@ -164,7 +164,7 @@ public TestDocumentClassSerializer()
164164
this.RegisterMember("Colors2", "colors2", listSerializer);
165165
}
166166

167-
public override BsonSerializationInfo GetMemberSerializationInfo(string memberName)
167+
public override bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo)
168168
{
169169
// Dynamic members are allowed in a TestDocument if
170170
// they start with Dynamic- or are an ObjectId.
@@ -173,20 +173,22 @@ public override BsonSerializationInfo GetMemberSerializationInfo(string memberNa
173173
ObjectId objectId;
174174
if (memberName.StartsWith("Dynamic-"))
175175
{
176-
return new BsonSerializationInfo(
176+
serializationInfo = new BsonSerializationInfo(
177177
memberName,
178178
BsonValueSerializer.Instance,
179179
typeof(BsonValue));
180+
return true;
180181
}
181182
else if (ObjectId.TryParse(memberName, out objectId))
182183
{
183-
return new BsonSerializationInfo(
184+
serializationInfo = new BsonSerializationInfo(
184185
memberName,
185186
BsonValueSerializer.Instance,
186187
typeof(BsonValue));
188+
return true;
187189
}
188190

189-
return base.GetMemberSerializationInfo(memberName);
191+
return base.TryGetMemberSerializationInfo(memberName, out serializationInfo);
190192
}
191193

192194
protected override TestDocument CreateInstance(BsonDocument backingDocument)

src/MongoDB.Driver.Legacy/Linq/Utils/BsonSerializationInfoFinder.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,12 @@ protected override BsonSerializationInfo VisitMember(MemberExpression node)
159159
return null;
160160
}
161161

162-
var memberSerializationInfo = documentSerializer.GetMemberSerializationInfo(node.Member.Name);
162+
BsonSerializationInfo memberSerializationInfo;
163+
if (!documentSerializer.TryGetMemberSerializationInfo(node.Member.Name, out memberSerializationInfo))
164+
{
165+
var message = string.Format("The member {0} does not exist.", node.Member.Name);
166+
throw new ArgumentOutOfRangeException("memberName", message);
167+
}
163168
return CombineSerializationInfo(serializationInfo, memberSerializationInfo);
164169
}
165170

@@ -245,7 +250,7 @@ private BsonSerializationInfo VisitGetItem(MethodCallExpression node)
245250
}
246251

247252
var indexName = indexExpression.Value.ToString();
248-
if (indexExpression.Type == typeof(int) ||
253+
if (indexExpression.Type == typeof(int) ||
249254
indexExpression.Type == typeof(uint) ||
250255
indexExpression.Type == typeof(long) ||
251256
indexExpression.Type == typeof(ulong))
@@ -265,9 +270,9 @@ private BsonSerializationInfo VisitGetItem(MethodCallExpression node)
265270
}
266271

267272
var documentSerializer = serializationInfo.Serializer as IBsonDocumentSerializer;
268-
if (documentSerializer != null)
273+
BsonSerializationInfo memberSerializationInfo;
274+
if (documentSerializer != null && documentSerializer.TryGetMemberSerializationInfo(indexName, out memberSerializationInfo))
269275
{
270-
var memberSerializationInfo = documentSerializer.GetMemberSerializationInfo(indexName);
271276
return CombineSerializationInfo(serializationInfo, memberSerializationInfo);
272277
}
273278

0 commit comments

Comments
 (0)