예제 #1
0
 public SqlColumnInfo(MemberInfo memberInfo, string columnName, IMemberConverter converter, ISerializationTypeMapping typeMapping)
     : this(typeMapping, columnName, converter)
 {
     if (memberInfo == null) {
         throw new ArgumentNullException("memberInfo");
     }
     this.memberInfo = memberInfo;
 }
        public ObjectConverter(CborOptions options)
        {
            _options       = options;
            _registry      = options.Registry;
            _objectMapping = _registry.ObjectMappingRegistry.Lookup <T>();

            _memberConvertersForWrite = new List <IMemberConverter>();

            foreach (IMemberMapping memberMapping in _objectMapping.MemberMappings)
            {
                IMemberConverter memberConverter = memberMapping.GenerateMemberConverter();

                if (memberMapping.CanBeDeserialized || _objectMapping.IsCreatorMember(memberConverter.MemberName))
                {
                    _memberConvertersForRead.Add(memberConverter.MemberName, memberConverter);

                    if (memberConverter.RequirementPolicy == RequirementPolicy.AllowNull ||
                        memberConverter.RequirementPolicy == RequirementPolicy.Always)
                    {
                        _requiredMemberConvertersForRead.Add(memberConverter);
                    }
                }

                if (memberMapping.CanBeSerialized)
                {
                    _memberConvertersForWrite.Add(memberConverter);
                }
            }

            _isInterfaceOrAbstract = typeof(T).IsInterface || typeof(T).IsAbstract;
            _isStruct = typeof(T).IsStruct();

            if (!_isInterfaceOrAbstract && !_isStruct && _objectMapping.CreatorMapping == null)
            {
                ConstructorInfo?defaultConstructorInfo = typeof(T).GetConstructor(
                    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
                    null,
                    Type.EmptyTypes,
                    null);

                if (defaultConstructorInfo == null)
                {
                    throw new CborException($"Cannot find a default constructor on type {typeof(T)}");
                }

                _constructor = defaultConstructorInfo.CreateDelegate <T>();
            }

            _discriminatorConvention = _registry.DiscriminatorConventionRegistry.GetConvention(typeof(T));
        }
예제 #3
0
 public SqlColumnInfo(ISerializationTypeMapping typeMapping, string columnName, IMemberConverter converter)
 {
     if (string.IsNullOrEmpty(columnName)) {
         throw new ArgumentNullException("columnName");
     }
     if (converter == null) {
         throw new ArgumentNullException("converter");
     }
     if (typeMapping == null) {
         throw new ArgumentNullException("typeMapping");
     }
     name = columnName;
     this.converter = converter;
     this.typeMapping = typeMapping;
 }
예제 #4
0
            public static MemberConverters Create(JsonSerializerOptions options, IObjectMapping objectMapping)
            {
                MemberConverters converters = new MemberConverters();

                if (options.PropertyNameCaseInsensitive)
                {
                    converters.ForReadAsString = new Dictionary <string, IMemberConverter>(StringComparer.OrdinalIgnoreCase);
                }

                converters.ExtensionData = objectMapping.ExtensionData;

                foreach (IMemberMapping memberMapping in objectMapping.MemberMappings)
                {
                    IMemberConverter memberConverter = memberMapping.GenerateMemberConverter();

                    if (memberMapping.CanBeDeserialized || objectMapping.IsCreatorMember(memberConverter.MemberName))
                    {
                        if (options.PropertyNameCaseInsensitive)
                        {
                            converters.ForReadAsString.Add(memberConverter.MemberNameAsString, memberConverter);
                        }
                        converters.ForRead.Add(memberConverter.MemberName, memberConverter);

                        if (memberConverter.RequirementPolicy == RequirementPolicy.AllowNull ||
                            memberConverter.RequirementPolicy == RequirementPolicy.Always)
                        {
                            converters.RequiredForRead.Add(memberConverter);
                        }
                    }

                    if (memberMapping.CanBeSerialized)
                    {
                        converters.ForWrite.Add(memberConverter);
                    }
                }

                return(converters);
            }