Serialization Attributes

Read time 2 minutes Package: Nalix.Abstractions
On this page

Namespace: Nalix.Abstractions.Serialization (and Nalix.Abstractions.Networking.Packets)
Assembly: Nalix.Abstractions

Nalix.Abstractions.Serialization defines the compile-time attributes, layout enums, size contracts, and boundary constants used by SerializeFormatterGenerator, PacketSchemaGenerator, and LiteSerializer.

Source Mapping

  • src/Nalix.Abstractions/Serialization/GenerateFormatterAttribute.cs
  • src/Nalix.Abstractions/Networking/Packets/PacketAttribute.cs
  • src/Nalix.Abstractions/Serialization/SerializePackableAttribute.cs
  • src/Nalix.Abstractions/Serialization/SerializeOrderAttribute.cs
  • src/Nalix.Abstractions/Serialization/SerializeIgnoreAttribute.cs
  • src/Nalix.Abstractions/Serialization/SerializeHeaderAttribute.cs
  • src/Nalix.Abstractions/Serialization/SerializeDynamicSizeAttribute.cs
  • src/Nalix.Abstractions/Serialization/SerializeLayout.cs
  • src/Nalix.Abstractions/Serialization/SerializerBounds.cs
  • src/Nalix.Abstractions/Serialization/IFixedSizeSerializable.cs

Attributes & Contracts Reference

TypeTargetConstructors & MembersPurpose
[Packet] (PacketAttribute)Class, Struct, InterfacePacketAttribute()Marks a PacketBase<TSelf> class (implements IPacketStaticOpcode) for discovery by PacketRegistryGenerator.
[GenerateFormatter]Class, StructGenerateFormatterAttribute()Instructs SerializeFormatterGenerator to emit an IFormatter<T> (and IFillableFormatter<T> for classes) at compile time. Target must be partial (NALIX059).
[SerializePackable]Class, Struct, InterfaceSerializePackableAttribute(SerializeLayout layout = SerializeLayout.Auto)
Property: SerializeLayout SerializeLayout
Declares the member ordering mode (Auto, Sequential, or Explicit).
[SerializeOrder]Field, PropertySerializeOrderAttribute(int order)
SerializeOrderAttribute(PacketHeaderOffset offset)
Property: int Order
Assigns the non-negative serialization sequence index (0, 1, 2...) when using SerializeLayout.Explicit.
[SerializeIgnore]Field, PropertySerializeIgnoreAttribute()Excludes a field or property from binary serialization. Cannot be combined with [SerializeOrder] (NALIX015).
[SerializeHeader]Field, PropertySerializeHeaderAttribute(int order)
SerializeHeaderAttribute(PacketHeaderOffset offset)
Property: int Order
Marks a base header field (PacketHeaderOffset.Region = 6 reserves bytes 0..5 on PacketBase<TSelf>, enforced by NALIX022).
[SerializeDynamicSize]Field, PropertySerializeDynamicSizeAttribute(int size = 20)
Property: int Size
Provides a buffer-sizing hint for variable-length strings, arrays, or collections.
IFixedSizeSerializableInterfacestatic abstract int Size { get; }Contract for fixed-size structs/packets whose wire size is known at compile time (cannot contain dynamic members per NALIX051).
SerializerBoundsStatic classNull = -1
MaxArray = 1_048_576
MaxString = 1_048_576
NullArrayMarker => [255, 255, 255, 255] (ReadOnlySpan<byte>)
EmptyArrayMarker => [0, 0, 0, 0] (ReadOnlySpan<byte>)
Wire markers and hard safety caps for array and string deserialization.

Example

using Nalix.Abstractions;
using Nalix.Abstractions.Networking.Packets;
using Nalix.Abstractions.Serialization;
using Nalix.Codec.DataFrames;

[Packet]
[GenerateFormatter]
[SerializePackable(SerializeLayout.Explicit)]
public sealed partial class TransformUpdatePacket : PacketBase<TransformUpdatePacket>, IPacketStaticOpcode
{
    public static ushort StaticOpCode => 0x2001;

    [SerializeOrder(0)]
    public ulong EntityId { get; set; }

    [SerializeOrder(1)]
    public float X { get; set; }

    [SerializeOrder(2)]
    public float Y { get; set; }

    [SkipClean]
    [SerializeIgnore]
    public long LocalTimestampTicks { get; set; }
}