Cysharp / MemoryPack

Zero encoding extreme performance binary serializer for C# and Unity.
MIT License
3.25k stars 189 forks source link

[MemoryPackIgnore] for field in unmanaged struct does not wok. #325

Open vrecluse opened 1 month ago

vrecluse commented 1 month ago

It seems unmanaged struct always serialize all data as-is.

[MemoryPackable]
public partial struct MyUnmanagedStruct
{
    [MemoryPackIgnore]
    public int Value1;
    public int Value2;
}

public class MyTest {
    [Fact]
    public void IgnoredField_ShouldNotBeSerialized()
    {
        // Arrange
        var data = new MyUnmanagedStruct() { Value1 = 1, Value2 = 2 };
        var bytes = MemoryPackSerializer.Serialize(data);

        // Act
        var deserialized = MemoryPackSerializer.Deserialize<MyUnmanagedStruct>(bytes);

        // Assert
        Assert.Equal(0, deserialized.Value1);     // failed here
        Assert.Equal(data.Value2, deserialized.Value2);
    }
}
neuecc commented 3 weeks ago

Yes, unmanaged structs ignore all configurations. It may be detected and changed to a compile error.