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; }
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(); } }
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(); } } }
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; }