MongoDB.Bson.Serialization.BsonMemberMap.GetSerializer C# (CSharp) Метод

GetSerializer() публичный Метод

Gets the serializer.
public GetSerializer ( Type actualType ) : IBsonSerializer
actualType System.Type The actual type of the member's value.
Результат IBsonSerializer
        public IBsonSerializer GetSerializer(Type actualType)
        {
            // if a custom serializer is configured always return it
            if (_serializer != null)
            {
                return _serializer;
            }
            else
            {
                // return special serializer for BsonValue members that handles the _csharpnull representation
                if (_memberTypeIsBsonValue)
                {
                    return BsonValueCSharpNullSerializer.Instance;
                }

                // return a cached serializer when possible
                if (actualType == _memberType)
                {
                    var serializer = _cachedSerializer;
                    if (serializer == null)
                    {
                        // it's possible but harmless for multiple threads to do the initial lookup at the same time
                        serializer = BsonSerializer.LookupSerializer(_memberType);
                        _cachedSerializer = serializer;
                    }
                    return serializer;
                }
                else
                {
                    return BsonSerializer.LookupSerializer(actualType);
                }
            }
        }

Usage Example

Пример #1
0
        private object DeserializeMemberValue(BsonReader bsonReader, BsonMemberMap memberMap)
        {
            try
            {
                var nominalType = memberMap.MemberType;

                var bsonType = bsonReader.GetCurrentBsonType();
                if (bsonType == BsonType.Null && nominalType.IsInterface)
                {
                    bsonReader.ReadNull();
                    return(null);
                }

                Type actualType;
                if (bsonType == BsonType.Null)
                {
                    actualType = nominalType;
                }
                else
                {
                    var discriminatorConvention = memberMap.GetDiscriminatorConvention();
                    actualType = discriminatorConvention.GetActualType(bsonReader, nominalType); // returns nominalType if no discriminator found
                }

                var serializer = memberMap.GetSerializer(actualType);
                return(serializer.Deserialize(bsonReader, nominalType, actualType, memberMap.SerializationOptions));
            }
            catch (Exception ex)
            {
                var message = string.Format(
                    "An error occurred while deserializing the {0} {1} of class {2}: {3}", // terminating period provided by nested message
                    memberMap.MemberName, (memberMap.MemberInfo.MemberType == MemberTypes.Field) ? "field" : "property", memberMap.ClassMap.ClassType.FullName, ex.Message);
                throw new FileFormatException(message, ex);
            }
        }
All Usage Examples Of MongoDB.Bson.Serialization.BsonMemberMap::GetSerializer