Sprite Serialization in Netcode

Hello. I want to serialize Sprite in Netcode, but getting this error: OverflowException: Writing past the end of the buffer
Unity.Netcode.FastBufferWriter.WriteBytesSafe (System.Byte
value, System.Int32 size, System.Int32 offset)
* What am I doing wrong?

This is my class:

using Unity.Netcode;
using UnityEngine;

[CreateAssetMenu(fileName = "New Item", menuName = "Inventory/Item")]
public class Item : ScriptableObject, INetworkSerializable
{
    public string name = "New Item";
    public bool isDefaultItem = false;
    public Sprite icon;
    
    public virtual void Use()
    {

    }

    public void RemoveFromInventory()
    {
        // Inventory.instance.Remove(this);
    }

    /* Serialization  */
    public void SetIconFromByteArray(byte[] bytes)
    {
        Texture2D texture = new Texture2D(2, 2);
        texture.LoadImage(bytes);
        icon = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.one * 0.5f);
    }

    public byte[] GetIconAsByteArray()
    {
        Texture2D texture = icon.texture;
        return texture.EncodeToPNG();
    }
    
    void INetworkSerializable.NetworkSerialize<T>(BufferSerializer<T> serializer)
    {
        serializer.SerializeValue(ref name);
        serializer.SerializeValue(ref isDefaultItem);

        byte[] iconBytes = GetIconAsByteArray();
        serializer.SerializeValue(ref iconBytes);
        if (serializer.IsReader)
        {
            SetIconFromByteArray(iconBytes);
        }
    }
}