protected virtual void CheckParameters(SerializerParameters parameters, out Encoding encoding)
        {
            if (parameters != null)
            {
                if (parameters.ContentEncoding != null && parameters.ContentEncoding != "identity")
                    throw new NotSupportedException($"Do not support Content-Encoding: {parameters.ContentEncoding}");

                if (!string.IsNullOrEmpty(parameters.ContentType))
                {
                    MediaTypeHeaderValue contentType;
                    if (!MediaTypeHeaderValue.TryParse(parameters.ContentType, out contentType))
                        throw new FormatException($"Cannot parse Content-Type: {parameters.ContentType}");

                    if (contentType.MediaType != "application/json")
                        throw new NotSupportedException($"Invalid media type: {contentType.MediaType}");

                    if (!string.IsNullOrEmpty(contentType.CharSet))
                        encoding = Encoding.GetEncoding(contentType.CharSet, Encoding.EncoderFallback, Encoding.DecoderFallback);
                    else
                        encoding = Encoding;

                    return;
                }
            }
            encoding = Encoding;
        }
Beispiel #2
0
        private void CheckParameters(SerializerParameters parameters, out CompressAlgorithm algorithm)
        {
            if (!string.IsNullOrEmpty(parameters?.ContentEncoding))
            {
                switch (parameters.ContentEncoding)
                {
                case "identity":
                    algorithm = CompressAlgorithm.Identity;
                    return;

                case "deflate":
                    algorithm = CompressAlgorithm.Deflate;
                    return;

                case "gzip":
                    algorithm = CompressAlgorithm.GZip;
                    return;

                default:
                    throw new NotSupportedException("Compression algorithm not supported");
                }
            }

            algorithm = CompressAlgorithm.Identity;
        }
        public async Task WriteParametersAsync(SerializerParameters parameters, CancellationToken cancellationToken = new CancellationToken())
        {
            BlockBlob.Properties.ContentType = parameters?.ContentType;
            BlockBlob.Properties.ContentEncoding = parameters?.ContentEncoding;

            await BlockBlob.SetPropertiesAsync();
        }
        public async Task<object> DeserializeAsync(Stream stream, SerializerParameters parameters, CancellationToken cancellationToken = new CancellationToken())
        {
            if (stream == null) throw new ArgumentNullException(nameof(stream));

            CompressAlgorithm algorithm;
            CheckParameters(parameters, out algorithm);

            Stream innerStream = stream;
            var innerParameters = new SerializerParameters(parameters.ContentType);
            switch (Algorithm)
            {
                case CompressAlgorithm.Identity:
                    break;
                case CompressAlgorithm.Deflate:
                    innerStream = new DeflateStream(stream, CompressionMode.Decompress, true);
                    break;
                case CompressAlgorithm.GZip:
                    innerStream = new GZipStream(stream, CompressionMode.Decompress, true);
                    break;
                default:
                    throw new ArgumentOutOfRangeException(nameof(Algorithm));
            }

            try
            {
                var value = await InnerSerializer.DeserializeAsync(innerStream, innerParameters, cancellationToken);

                return value;
            }
            finally
            {
                if (innerStream != stream)
                    innerStream.Dispose();
            }
        }
Beispiel #5
0
        public async Task <object> DeserializeAsync(Stream stream, SerializerParameters parameters, CancellationToken cancellationToken = new CancellationToken())
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            CompressAlgorithm algorithm;

            CheckParameters(parameters, out algorithm);

            Stream innerStream     = stream;
            var    innerParameters = new SerializerParameters(parameters.ContentType);

            switch (Algorithm)
            {
            case CompressAlgorithm.Identity:
                break;

            case CompressAlgorithm.Deflate:
                innerStream = new DeflateStream(stream, CompressionMode.Decompress, true);
                break;

            case CompressAlgorithm.GZip:
                innerStream = new GZipStream(stream, CompressionMode.Decompress, true);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(Algorithm));
            }

            try
            {
                var value = await InnerSerializer.DeserializeAsync(innerStream, innerParameters, cancellationToken);

                return(value);
            }
            finally
            {
                if (innerStream != stream)
                {
                    innerStream.Dispose();
                }
            }
        }
Beispiel #6
0
 public Task WriteParametersAsync(SerializerParameters parameters, CancellationToken cancellationToken = new CancellationToken())
 {
     return(Task.CompletedTask);
 }
        private void CheckParameters(SerializerParameters parameters, out CompressAlgorithm algorithm)
        {
            if (!string.IsNullOrEmpty(parameters?.ContentEncoding))
            {
                switch (parameters.ContentEncoding)
                {
                    case "identity":
                        algorithm = CompressAlgorithm.Identity;
                        return;
                    case "deflate":
                        algorithm = CompressAlgorithm.Deflate;
                        return;
                    case "gzip":
                        algorithm = CompressAlgorithm.GZip;
                        return;
                    default:
                        throw new NotSupportedException("Compression algorithm not supported");
                }
            }

            algorithm = CompressAlgorithm.Identity;
        }
 public Task WriteParametersAsync(SerializerParameters parameters, CancellationToken cancellationToken = new CancellationToken())
 {
     return Task.CompletedTask;
 }