public void WritePolymorphicObject(CborDiscriminatorPolicy discriminatorPolicy, string hexBuffer)
        {
            CborOptions options = new CborOptions();

            options.Registry.DiscriminatorConventionRegistry.RegisterConvention(new AttributeBasedDiscriminatorConvention <string>(options.Registry));
            options.Registry.DiscriminatorConventionRegistry.RegisterType(typeof(NameObject));
            options.Registry.ObjectMappingRegistry.Register <NameObject>(om =>
            {
                om.AutoMap();
                om.SetDiscriminatorPolicy(discriminatorPolicy);
            });
            options.Registry.ObjectMappingRegistry.Register <BaseObject>(om =>
            {
                om.AutoMap();
                om.SetDiscriminatorPolicy(discriminatorPolicy);
            });

            BaseObjectHolder obj = new BaseObjectHolder
            {
                BaseObject = new NameObject
                {
                    Id   = 1,
                    Name = "foo"
                },
                NameObject = new NameObject
                {
                    Id   = 2,
                    Name = "bar"
                }
            };

            Helper.TestWrite(obj, hexBuffer, null, options);
        }
Example #2
0
        public DiscriminatorMemberConverter(
            IDiscriminatorConvention discriminatorConvention,
            CborDiscriminatorPolicy discriminatorPolicy)
        {
            _discriminatorConvention = discriminatorConvention;
            _discriminatorPolicy     = discriminatorPolicy;

            if (discriminatorConvention != null)
            {
                _memberName = discriminatorConvention.MemberName.ToArray();
            }
        }
Example #3
0
        public bool ShouldSerialize(object obj, Type declaredType, CborOptions options)
        {
            if (_discriminatorConvention == null)
            {
                return(false);
            }

            CborDiscriminatorPolicy discriminatorPolicy = _discriminatorPolicy != CborDiscriminatorPolicy.Default ? _discriminatorPolicy
                : (options.DiscriminatorPolicy != CborDiscriminatorPolicy.Default ? options.DiscriminatorPolicy : CborDiscriminatorPolicy.Auto);

            return(discriminatorPolicy == CborDiscriminatorPolicy.Always ||
                   discriminatorPolicy == CborDiscriminatorPolicy.Auto && obj.GetType() != declaredType);
        }