Example #1
0
        public void WritePolymorphicObject(DiscriminatorPolicy discriminatorPolicy, string expected)
        {
            JsonSerializerOptions options = new JsonSerializerOptions();

            options.SetupExtensions();
            DiscriminatorConventionRegistry registry = options.GetDiscriminatorConventionRegistry();

            registry.ClearConventions();
            registry.RegisterConvention(new DefaultDiscriminatorConvention <int>(options));
            registry.RegisterType <NameObject>();
            registry.DiscriminatorPolicy = discriminatorPolicy;

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

            string actual = JsonSerializer.Serialize(obj, options);

            Assert.Equal(expected, actual);
        }
Example #2
0
        public bool ShouldSerialize(object obj, Type declaredType, JsonSerializerOptions options)
        {
            if (_discriminatorConvention == null)
            {
                return(false);
            }

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

            return(discriminatorPolicy == DiscriminatorPolicy.Always ||
                   discriminatorPolicy == DiscriminatorPolicy.Auto && obj.GetType() != declaredType);
        }
Example #3
0
        public DiscriminatorMemberConverter(
            IDiscriminatorConvention discriminatorConvention,
            DiscriminatorPolicy discriminatorPolicy)
        {
            _discriminatorConvention = discriminatorConvention;
            _discriminatorPolicy     = discriminatorPolicy;

            if (discriminatorConvention != null)
            {
                ReadOnlySpan <byte> discriminatorMemberName = discriminatorConvention.MemberName;
                _memberName        = discriminatorMemberName.ToArray();
                MemberNameAsString = Encoding.UTF8.GetString(discriminatorMemberName);
            }
        }
Example #4
0
 public ObjectMapping <T> SetDiscriminatorPolicy(DiscriminatorPolicy discriminatorPolicy)
 {
     DiscriminatorPolicy = discriminatorPolicy;
     return(this);
 }