How can I tell the MongoDB C# driver to store all Guids in string format?

mongodb, mongodb-.net-driver, serialization

Solution

This can be achieved using Conventions

Something along the lines of:

var myConventions = new ConventionProfile();
myConventions.SetSerializationOptionsConvention(
    new TypeRepresentationSerializationOptionsConvention(typeof (Guid), BsonType.String));

BsonClassMap.RegisterConventions(myConventions, t => t == typeof (MyClass));

This should go somewhere in your app startup.

You can read more about conventions here: http://www.mongodb.org/display/DOCS/CSharp+Driver+Serialization+Tutorial#CSharpDriverSerializationTutorial-Conventions

Problem

I'm currently applying the `[BsonRepresentation(BsonType.String)]` attribute to all `Guid` properties in my domain models to have those properties serialized in string format. Besides being tiresome to do, that doesn't work out sometimes, e.g. with custom `Wrapper<T>` classes: ``` public class Wrapper<T> { public T Value { get; set; } // Further properties / business logic ... } ``` When `T` is `Guid`, the `Value` property will be stored as binary data of type `UuidLegacy` (as will any property of type `Guid` that's not decorated with the above attribute). However, I'd like all `Guid`s, including `Wrapper<Guid>.Value`, to be represented as a string in the database. Is there any way to tell the MongoDB C# driver to store all `Guid`s in string format?

Original source