Skip to content

Required members with circular reference causes CS9035 #370

@ardabada

Description

@ardabada

Having required members together with circular reference serialization causes CS9035 (required member must be set in the object initializer or attribute constructor) compilation error in generated file. The issue present only if GenerateType is CircularReference.

Reproduction Steps

[MemoryPackable(GenerateType.CircularReference, SerializeLayout.Explicit)]
public partial class Category
{
    [MemoryPackOrder(0)]
    public required string Id { get; init; }

    [MemoryPackOrder(1)]
    public required string Name { get; init; }

    [MemoryPackOrder(3)]
    public required Category[] Subcategories { get; init; }
}

Expected behavior
Source generated file compiles as expected.

Workaround
Remove required keyword and use null-forgiving operator where needed:

[MemoryPackable(GenerateType.CircularReference, SerializeLayout.Explicit)]
public partial class Category
{
    [MemoryPackOrder(0)]
    public string Id { get; init; } = null!;

    [MemoryPackOrder(1)]
    public string Name { get; init; } = null!;

    [MemoryPackOrder(3)]
    public Category[] Subcategories { get; init; } = null!;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions