//#start_publishing
        protected override void Test(Stream target)
        {
            // You can use a singleton instance:
            IXlsxSerializer serializer = XlsxSerializer.Instance;

            // Or instantiate the class:
            serializer = new XlsxSerializer();
        }
        public override Task WriteToStreamAsync(Type type,
                                                object value,
                                                Stream writeStream,
                                                System.Net.Http.HttpContent content,
                                                System.Net.TransportContext transportContext)
        {
            // Create a document builder.
            var document = new SqadXlsxDocumentBuilder(writeStream);

            if (value == null)
            {
                return(document.WriteToStream());
            }

            var valueType = value.GetType();


            // Get the item type.
            var itemType = FormatterUtils.IsSimpleType(valueType)
                ? null
                : FormatterUtils.GetEnumerableItemType(valueType);

            // If a single object was passed, treat it like a list with one value.
            if (itemType == null)
            {
                itemType = valueType;
            }

            // Used if no other matching serialiser can be found.
            IXlsxSerializer serializer = null;

            // Determine if a more specific serialiser might apply.
            if (Serializers != null)
            {
                foreach (var s in Serializers)
                {
                    if (!s.CanSerializeType(valueType, itemType) || s.SerializerType != _serializerType)
                    {
                        continue;
                    }

                    serializer = s;
                    break;
                }
            }

            serializer?.Serialize(itemType, value, document, null, null, null);

            if (!document.IsVBA)
            {
                content.Headers.ContentDisposition.FileName =
                    content.Headers.ContentDisposition.FileName.Replace("xlsm", "xlsx");
            }

            return(document.WriteToStream());
        }