-
Type: Task
-
Resolution: Done
-
Priority: Major - P3
-
None
-
Affects Version/s: 2.8.0
-
Component/s: Documentation, Linq, Read Operations, Serialization
-
Environment:Windows 10 Professional x64, .NET Core 2.2
Hi!
I made a generic custom serializer implementing IBsonDocumentSerializer and IBsonSerializer interfaces. It works very well to insert/update documents on the database, but I'm having some troubles on read operations when using LINQ. Consider the following example classes:
public class RootClass { public string Id {get; set; } public NewClass NewClass {get; set; } }
public class NewClass { public int NewProperty {get; set; } }
And here's my implementation of "TryGetMemberSerializationInfo":
public class CustomSerializer<T> : IBsonDocumentSerializer, IBsonSerializer<T> where T : class { public Type ValueType => typeof(T); public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo) { var propTypeName = ValueType.GetProperty(memberName).PropertyType.Name; serializationInfo = new BsonSerializationInfo(memberName, GetProperlyBsonSerializer(propTypeName), typeof(string)); return serializationInfo != null; } private IBsonSerializer GetProperlyBsonSerializer(string propName) { switch (propName) { case "Int32": return new MongoDB.Bson.Serialization.Serializers.Int32Serializer(); case "String": return new MongoDB.Bson.Serialization.Serializers.StringSerializer(); default: return null; } } }
When I query my DB using LINQ operators and the conditional parameter is a property from another object that is accessed by a navigation property, like this:
var return = rootClassCollection.AsQueryable().FirstOrDefault(x => x.NewClass.NewProperty == 1);
The memberName parameter receives the value "NewClass", instead of "NewProperty", so I can't classify the type correctly, generating an exception.
This problem doesn't happens when I use a parameter that isn't a navigation property, like this:
var return = rootClassCollection.AsQueryable().FirstOrDefault(x => x.Id.Equals("AB123"));
I think that this issue is nearly the same issue described in CSHARP-1755, however, since it was discussed almost 3 years ago, any new recommendations?
Thanks in advance!