-
Notifications
You must be signed in to change notification settings - Fork 4
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Code for testing:
abstract record Entity(string Name);
record WorldEntity(string Name) : Entity(Name);
record PlaceholderGroupWorldEntity(string Name) : WorldEntity(Name);
record BrokenCellEntities(List<WorldEntity> Entities) : Packet;
record WorkingCellEntities(List<Entity> Entities) : Packet;
abstract record Packet;
record Wrapper(Packet Instance);
internal class Program
{
private static readonly string DesktopFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.json");
private static Wrapper Read() => BinaryConverter.Deserialize<Wrapper>(File.ReadAllBytes(DesktopFile));
private static void Write<T>(T instance) where T : Packet => File.WriteAllBytes(DesktopFile, BinaryConverter.Serialize(new Wrapper(instance)));
public static void Main(string[] args)
{
BinaryConverter.RegisterUnion<Packet>(typeof(BrokenCellEntities), typeof(WorkingCellEntities));
BinaryConverter.RegisterUnion<Entity>(typeof(PlaceholderGroupWorldEntity), typeof(WorldEntity));
PlaceholderGroupWorldEntity e = new("Placeholder Entity");
// Broken
Write(new BrokenCellEntities(new List<WorldEntity>() { e }));
Console.WriteLine((Read().Instance as BrokenCellEntities).Entities.First());
// Workaround
Write(new WorkingCellEntities(new List<Entity>() { e }));
Console.WriteLine((Read().Instance as WorkingCellEntities).Entities.First());
}
}Which outputs:
WorldEntity { Name = Placeholder Entity } <-- broken
PlaceholderGroupWorldEntity { Name = Placeholder Entity } <-- workaround
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working