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); }
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); }
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); } }
public ObjectMapping <T> SetDiscriminatorPolicy(DiscriminatorPolicy discriminatorPolicy) { DiscriminatorPolicy = discriminatorPolicy; return(this); }