public override void Serialize(
BsonWriter bsonWriter,
Type nominalType,
object value,
IBsonSerializationOptions options)
{
var timeSpan = (TimeSpan)value;
// support RepresentationSerializationOptions for backward compatibility
var representationSerializationOptions = options as RepresentationSerializationOptions;
if (representationSerializationOptions != null)
{
options = new TimeSpanSerializationOptions(representationSerializationOptions.Representation);
}
var timeSpanSerializationOptions = EnsureSerializationOptions<TimeSpanSerializationOptions>(options);
switch (timeSpanSerializationOptions.Representation)
{
case BsonType.Double:
bsonWriter.WriteDouble(ToDouble(timeSpan, timeSpanSerializationOptions.Units));
break;
case BsonType.Int32:
bsonWriter.WriteInt32(ToInt32(timeSpan, timeSpanSerializationOptions.Units));
break;
case BsonType.Int64:
bsonWriter.WriteInt64(ToInt64(timeSpan, timeSpanSerializationOptions.Units));
break;
case BsonType.String:
bsonWriter.WriteString(timeSpan.ToString()); // not XmlConvert.ToString (we're using .NET's format for TimeSpan)
break;
default:
var message = string.Format("'{0}' is not a valid TimeSpan representation.", timeSpanSerializationOptions.Representation);
throw new BsonSerializationException(message);
}
}