mongodb c # Ошибка EnumSerializer - PullRequest
       1

mongodb c # Ошибка EnumSerializer

0 голосов
/ 10 октября 2018

Я прочитал исходный код c # SDK v2.7 и обнаружил следующую проблему.

namespace MongoDB.Bson.Serialization.Serializers
{
    /// <summary>
    /// Represents a serializer for enums.
    /// </summary>
    /// <typeparam name="TEnum">The type of the enum.</typeparam>
    public class EnumSerializer<TEnum> : StructSerializerBase<TEnum>, IRepresentationConfigurable<EnumSerializer<TEnum>> where TEnum : struct
    {
      ......
      public override TEnum Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
      {
        var bsonReader = context.Reader;

        var bsonType = bsonReader.GetCurrentBsonType();
        switch (bsonType)
        {
            case BsonType.Int32: return (TEnum)Enum.ToObject(typeof(TEnum), bsonReader.ReadInt32());
            case BsonType.Int64: return (TEnum)Enum.ToObject(typeof(TEnum), bsonReader.ReadInt64());
            case BsonType.Double: return (TEnum)Enum.ToObject(typeof(TEnum), (long)bsonReader.ReadDouble());
            case BsonType.String: return (TEnum)Enum.Parse(typeof(TEnum), bsonReader.ReadString());
            default:
                throw CreateCannotDeserializeFromBsonTypeException(bsonType);
        }
      }
     ......
    }
}

В этом методе код

case BsonType.String: return (TEnum)Enum.Parse(typeof(TEnum), bsonReader.ReadString());

вызовет ArgumentException, когдаReadString () возвращает значение, которое не определено в типе TEnum.

Будет ли лучше при подходе ниже десериализовать из строки в Enum?

case BsonType.String: 
    TEnum result;
    Enum.TryParse<TEnum>(bsonReader.ReadString(), out result);
    return result;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...