-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[question] how to have a abstract class/interface as a property/field without knowing the type before #20
Comments
The implementation of polymorphism in Dahomey.Cbor is based on a special field in which a special value is associated with an inherited class. The special field/value is called discriminator. By default the discriminator field is named "_t" and the discriminator values are configured
[CborDiscriminator("Apple")]
public class Apple : Fruit { ... }
[CborDiscriminator("Orange")]
public class Orange : Fruit { ... } Moreover , in this option, you need to register the assembly to allow the framework to discover the classed flagged by the CborDiscriminatorAttribute: CborOptions.Default.Registry.DefaultDiscriminatorConvention.RegisterAssembly(typeof(Fruit ).Assembly);
options.Registry.ObjectMappingRegistry.Register<Apple>(om => om.AutoMap().SetDiscriminator("Apple");
options.Registry.ObjectMappingRegistry.Register<Orange>(om => om.AutoMap().SetDiscriminator("Orange"); |
I tried both examples and I also added the [CborDiscriminator("Name")] attribute on all classes implementing the Fruit class, but it still throws: @mcatanzariti I am mentioning you by name because I do not have the permission to reopen this issue, but I feel like I should ask here. |
Did you try with the last official version? |
yes with 1.3.2, I have broken it down to tree classes while testing and found out the following:
|
further, serializing the above example will output |
Reproduced |
fix in 1.4.0 |
I know this is possible #11, but have you got any any idea on how I could use this if I do not know the type?
The text was updated successfully, but these errors were encountered: