/// <inheritdoc/>
        public override void Serialize(ref T urlReference, ArchiveMode mode, [NotNull] SerializationStream stream)
        {
            if (mode == ArchiveMode.Serialize)
            {
                var attachedReference = AttachedReferenceManager.GetAttachedReference(urlReference);
                if (attachedReference is null)
                {
                    throw new InvalidOperationException("UrlReference does not have an AttachedReference.");
                }

                stream.Write(attachedReference.Id);
                stream.Write(attachedReference.Url);
            }
            else
            {
                var id  = stream.Read <AssetId>();
                var url = stream.ReadString();

                urlReference = (T)UrlReferenceHelper.CreateReference(typeof(T), id, url);
            }
        }