Пример #1
0
        public EnumDictionaryKeyConverter()
        {
            string[] names  = Enum.GetNames(typeof(T));
            T[]      values = Enum.GetValues(typeof(T)).Cast <T>().ToArray();

            for (int i = 0; i < names.Length; i++)
            {
                ReadOnlyMemory <byte> name = Encoding.ASCII.GetBytes(names[i]);
                T value = values[i];

                _names2Values.Add(name.Span, value);
                _values2Names.Add(value, name);
            }
        }
        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));
        }
        public void AddTryGet(string values)
        {
            ByteBufferDictionary <string> binaryTree = new ByteBufferDictionary <string>();

            string[] valuesArray = values.Split(',');

            foreach (string value in valuesArray)
            {
                binaryTree.Add(value.AsBinarySpan(), value);
            }

            foreach (string value in valuesArray)
            {
                bool success = binaryTree.TryGetValue(value.AsBinarySpan(), out string actualValue);
                Assert.True(success);
                Assert.Equal(value, actualValue);
            }
        }
Пример #4
0
        public EnumConverter(CborOptions options)
        {
            _options = options;

            string[] names  = Enum.GetNames(typeof(T));
            T[]      values = Enum.GetValues(typeof(T)).Cast <T>().ToArray();

            values2Names = new Dictionary <T, ReadOnlyMemory <byte> >(names.Length);

            for (int i = 0; i < names.Length; i++)
            {
                T value = values[i];
                ReadOnlyMemory <byte> name = Encoding.ASCII.GetBytes(names[i]);

                names2Values.Add(name.Span, value);
                values2Names[value] = name;
            }
        }