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); }
public DiscriminatorMemberConverter( IDiscriminatorConvention discriminatorConvention, CborDiscriminatorPolicy discriminatorPolicy) { _discriminatorConvention = discriminatorConvention; _discriminatorPolicy = discriminatorPolicy; if (discriminatorConvention != null) { _memberName = discriminatorConvention.MemberName.ToArray(); } }
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); }