How to get interface properties serialized using MongDB C# driver

I would like to include properties defined in an interface during the serialization and deserialization to Bson documents. I tried registering derived classes using RegisterClassMap, still interface properties were not serialized and while retrieving through base property it gave me an error.

A sample use case is described below.
An interface IDomainEvent with properties(EventId, AggregateId and OccuredAt)
An abstract class DomainEvent implementing IDomainEvent.
Two classes UserCreated and UserNameChanged derived from abstract class DomainEvent. They contain event specific properties apart from base properties.

Insertion to DB happens with derived class properties only and no base properties such as EventId, AggregateId.
While retrieving document using base property ‘AggregateId’, property not found exception is thrown which is valid as its not present in the document.

Questions:

  • How can we get the interface properties serialized in the document?

Sample Code: Pastie
MongoDB.Driver : 2.17.1

using MongoDB.Bson.Serialization;
using MongoDB.Driver;

Console.WriteLine("Hello, World!");

public interface IDomainEvent
{
    Guid EventId { get; }
    Guid AggregateId { get; }
    DateTime OccuredAt { get; }
}

public abstract class DomainEvent : IDomainEvent
{
    protected DomainEvent(Guid aggregteId)
    {
        AggregateId = aggregteId;
        EventId = Guid.NewGuid();
        OccuredAt = DateTime.UtcNow;
    }
    public Guid EventId { get; }
    public Guid AggregateId { get; }
    public DateTime OccuredAt { get; }
}

public class UserCreated : DomainEvent
{
    public UserCreated(Guid userId, string name)
        : base(userId)
    {
        UserId = userId;
        Name = name;
        CreatedOn = DateTime.UtcNow;
    }
    public Guid UserId { get; }
    public string Name { get; }
    public DateTime CreatedOn { get; }
}

public class UserNameChanged : DomainEvent
{
    public UserNameChanged(Guid userId, string newName, string oldName)
        : base(userId)
    {
        UserId = userId;
        NewName = newName;
        OldName = oldName;
        CreatedOn = DateTime.UtcNow;
    }

    public Guid UserId { get; }
    public string NewName { get; }
    public string OldName { get; }
    public DateTime CreatedOn { get; }
}

// Create two events
var userId = Guid.NewGuid();
var name = "User-1";
var newName = "User-2";
var userCreatedEvent = new UserCreated(userId, name);
var userNameChangedEvent = new UserNameChanged(userId, newName, name);

// Add them to Mongo store
var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("test");
var collection = database.GetCollection<IDomainEvent>("events");

BsonClassMap.RegisterClassMap<UserCreated>();
BsonClassMap.RegisterClassMap<UserNameChanged>();

await collection.InsertOneAsync(userCreatedEvent);
await collection.InsertOneAsync(userNameChangedEvent);

var userEvents = await collection.FindAsync(x => x.AggregateId == userId); // Failing here as Document doesn't contain base property 'AggregateId'

Content of record in mongodb