Coder Social home page Coder Social logo

Comments (3)

mcatanzariti avatar mcatanzariti commented on June 20, 2024

@rmja

I could not repro the problem in this test:
https://github.com/dahomey-technologies/Dahomey.Cbor/blob/master/src/Dahomey.Cbor.Tests/Issues/Issue0091.cs

from dahomey.cbor.

rmja avatar rmja commented on June 20, 2024

Ok. I will try and reproduce this and get back

from dahomey.cbor.

rmja avatar rmja commented on June 20, 2024

@mcatanzariti The serialization/deserialization needs to be done on the abstract type. Here is a modified version of Issue0091.cs that fails:

#if NET6_0_OR_GREATER

using Dahomey.Cbor.Attributes;
using Dahomey.Cbor.Serialization.Conventions;
using System;
using Xunit;

namespace Dahomey.Cbor.Tests.Issues
{
    public class Issue0091
    {
        public abstract record class Animal(DateTime Timestamp)
        {
        }

        [CborDiscriminator("dog")]
        public record class Dog(string Color, DateTime Timestamp) : Animal(Timestamp)
        {
            // This example does not fail if this empty constructor is present
            //private Dog() : this("black", default)
            //{
            //}
        }

        [Fact]
        public void TestReadWrite()
        {
            CborOptions options = new CborOptions();
            options.Registry.DiscriminatorConventionRegistry.RegisterConvention(new AttributeBasedDiscriminatorConvention<string>(options.Registry));
            options.Registry.DiscriminatorConventionRegistry.RegisterType(typeof(Dog));

            Dog dog = new("black", DateTime.Parse("2022-10-24T14:05:08Z"));
            var cbor = Helper.Write<Animal>(dog, options);

            Animal deserialized = Helper.Read<Animal>(cbor, options);

            Assert.NotNull(deserialized);
            Dog dog2 = Assert.IsType<Dog>(deserialized);
            Assert.Equal(dog.Color, dog2.Color);
            Assert.Equal(dog.Timestamp, dog2.Timestamp);
        }
    }
}

#endif

from dahomey.cbor.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.