// public methods
/// <summary>
/// Deserializes a value.
/// </summary>
/// <param name="context">The deserialization context.</param>
/// <param name="args">The deserialization args.</param>
/// <returns>An object.</returns>
protected override Version DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var bsonReader = context.Reader;
BsonType bsonType = bsonReader.GetCurrentBsonType();
switch (bsonType)
{
case BsonType.Document:
int major = 0, minor = 0, build = 0, revision = 0;
var foundMemberFlags = _helper.DeserializeMembers(context, (elementName, flag) =>
{
switch (flag)
{
case Flags.Major: major = _int32Serializer.Deserialize(context); break;
case Flags.Minor: minor = _int32Serializer.Deserialize(context); break;
case Flags.Build: build = _int32Serializer.Deserialize(context); break;
case Flags.Revision: revision = _int32Serializer.Deserialize(context); break;
}
});
switch (foundMemberFlags)
{
case Flags.MajorMinor: return(new Version(major, minor));
case Flags.MajorMinorBuild: return(new Version(major, minor, build));
case Flags.All: return(new Version(major, minor, build, revision));
default: throw new BsonInternalException();
}
case BsonType.String:
return(new Version(bsonReader.ReadString()));
default:
throw CreateCannotDeserializeFromBsonTypeException(bsonType);
}
}