public override BsonDocument Render( IBsonSerializer documentSerializer, IBsonSerializerRegistry serializerRegistry) { StringFieldDefinitionHelper.Resolve( _path, documentSerializer, out string?resolvedFieldName, out IBsonSerializer? resolvedFieldSerializer); resolvedFieldSerializer ??= documentSerializer; if (_value is BsonDocument bsonDocument) { return(new BsonDocument(resolvedFieldName, bsonDocument)); } if (_value is BsonValue bsonValue) { return(new BsonDocument(resolvedFieldName, bsonValue)); } if (_value is MongoDbFilterDefinition mongoDbOperation) { if (_path is "") { return(mongoDbOperation.Render(resolvedFieldSerializer, serializerRegistry)); } return(new BsonDocument( resolvedFieldName, mongoDbOperation.Render(resolvedFieldSerializer, serializerRegistry))); } var document = new BsonDocument(); using var bsonWriter = new BsonDocumentWriter(document); var context = BsonSerializationContext.CreateRoot(bsonWriter); bsonWriter.WriteStartDocument(); bsonWriter.WriteName(resolvedFieldName); if (_value is IList values) { bsonWriter.WriteStartArray(); foreach (var value in values) { resolvedFieldSerializer.Serialize(context, value); } bsonWriter.WriteEndArray(); } else { if (_value is null) { bsonWriter.WriteNull(); } else if (_value is DateTimeOffset dateTimeOffset && resolvedFieldSerializer is DateTimeSerializer or NullableSerializer <DateTime> ) { if (dateTimeOffset.Offset == TimeSpan.Zero) { resolvedFieldSerializer.Serialize(context, dateTimeOffset.UtcDateTime); } else { resolvedFieldSerializer.Serialize(context, dateTimeOffset.DateTime); } }