using System.Runtime.Serialization.Json;
private static class FetchTranslatedFileOutlineFactory
const int BufferSize = 8192;
private static Stream CreateTemporaryStream() => new MemoryStream();
public static Payload CreateStreamedDocument( Stream inputStream ) =>
FetchTranslatedFileOutlineFactory.PopulateStreamedDocument( new Payload(null, CreateTemporaryStream()), inputStream );
public static Payload PopulateStreamedDocument( Payload fileOutline, Stream inputStream )
using( var reader = JsonReaderWriterFactory.CreateJsonReader( inputStream, XmlDictionaryReaderQuotas.Max ) )
if( reader.NodeType == XmlNodeType.Element && reader.LocalName == nameof( fileOutline.data ) )
byte[] buffer = new byte[ BufferSize ];
while( ( readBytes = reader.ReadElementContentAsBase64( buffer, 0, buffer.Length ) ) > 0 )
fileOutline.dataStream.Write( buffer, 0, readBytes );
if( fileOutline.dataStream.CanSeek )
fileOutline.dataStream.Position = 0;
public byte[] data {get; set; }
public Stream dataStream { get; set; }
public Payload( byte[] data, Stream dataStream )
this.dataStream = dataStream;
public static void Main()
byte[] byteArray = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Payload payload = new Payload( byteArray, null );
string json = JsonConvert.SerializeObject(payload);
Payload p = FetchTranslatedFileOutlineFactory.CreateStreamedDocument(new MemoryStream( Encoding.UTF8.GetBytes( json ) ) );
String newjs = @"{'data':'AQIDBAUGBwgJCg=='}";
Payload deserializedByteArray = JsonConvert.DeserializeObject<Payload>(newjs);
MemoryStream mem = new MemoryStream();
p.dataStream.CopyTo(mem);
if( deserializedByteArray.dataStream == null )
Console.WriteLine("NULL");
Console.Write(deserializedByteArray.dataStream);
foreach( byte b in deserializedByteArray.data )
Console.WriteLine("---" + b);