示例#1
0
 public IServiceRemotingResponseMessageBody Deserialize(IIncomingMessageBody messageBody)
 {
     using (var reader = new BsonDataReader(messageBody.GetReceivedBuffer()))
     {
         return(serializer.Deserialize <BsonRemotingResponseBody>(reader));
     }
 }
示例#2
0
        public void WriteBigInteger()
        {
            BigInteger i = BigInteger.Parse("1999999999999999999999999999999999999999999999999999999999990");

            MemoryStream   ms     = new MemoryStream();
            BsonDataWriter writer = new BsonDataWriter(ms);

            writer.WriteStartObject();
            writer.WritePropertyName("Blah");
            writer.WriteValue(i);
            writer.WriteEndObject();

            string bson = BytesToHex(ms.ToArray());

            Assert.AreEqual("2A-00-00-00-05-42-6C-61-68-00-1A-00-00-00-00-F6-FF-FF-FF-FF-FF-FF-1F-B2-21-CB-28-59-84-C4-AE-03-8A-44-34-2F-4C-4E-9E-3E-01-00", bson);

            ms.Seek(0, SeekOrigin.Begin);
            BsonDataReader reader = new BsonDataReader(ms);

            Assert.IsTrue(reader.Read());
            Assert.AreEqual(JsonToken.StartObject, reader.TokenType);
            Assert.IsTrue(reader.Read());
            Assert.AreEqual(JsonToken.PropertyName, reader.TokenType);

            Assert.IsTrue(reader.Read());
            Assert.AreEqual(JsonToken.Bytes, reader.TokenType);
            CollectionAssert.AreEqual(new byte[] { 246, 255, 255, 255, 255, 255, 255, 31, 178, 33, 203, 40, 89, 132, 196, 174, 3, 138, 68, 52, 47, 76, 78, 158, 62, 1 }, (byte[])reader.Value);
            Assert.AreEqual(i, new BigInteger((byte[])reader.Value));

            Assert.IsTrue(reader.Read());
            Assert.AreEqual(JsonToken.EndObject, reader.TokenType);

            Assert.IsFalse(reader.Read());
        }
        public void bson_serialize_object_test()
        {
            var          propName  = "Value";
            var          propValue = "Dummy";
            MemoryStream ms        = new MemoryStream();
            var          bs        = new BsonDataWriter(ms);

            bs.WriteStartObject();
            bs.WritePropertyName(propName);
            bs.WriteValue(propValue);
            bs.WriteEnd();
             
            ms.Seek(0, SeekOrigin.Begin);

             
            var reader = new BsonDataReader(ms);

            // object
            reader.Read();
            // property name
            reader.Read();
            Assert.Equal(propName, (string)reader.Value);
            reader.Read();
            Assert.Equal(propValue, (string)reader.Value);
        }
示例#4
0
        public jcCCResponseItem DecompressFile(byte[] compressedData)
        {
            var response = new jcCCResponseItem();

            var ms = new MemoryStream(compressedData);

            using (var reader = new BsonDataReader(ms)) {
                var serializer = new JsonSerializer();

                var obj = serializer.Deserialize <jcCCA>(reader);

                response.OutputFile = obj.Filename + ".org";

                response.compressedData = new byte[0];

                var data = new List <byte>();

                foreach (var patternID in obj.Patterns)
                {
                    data.AddRange(obj.Data.FirstOrDefault(a => a.Index == (patternID - 1))?.Data ?? throw new InvalidOperationException());
                }

                response.compressedData = data.ToArray();
            }

            return(response);
        }
示例#5
0
        public void WriteOid()
        {
            MemoryStream   ms     = new MemoryStream();
            BsonDataWriter writer = new BsonDataWriter(ms);

            byte[] oid = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

            writer.WriteStartObject();
            writer.WritePropertyName("_oid");
            writer.WriteObjectId(oid);
            writer.WriteEndObject();

            string bson = BytesToHex(ms.ToArray());

            Assert.AreEqual("17-00-00-00-07-5F-6F-69-64-00-01-02-03-04-05-06-07-08-09-0A-0B-0C-00", bson);

            ms.Seek(0, SeekOrigin.Begin);
            BsonDataReader reader = new BsonDataReader(ms);

            Assert.IsTrue(reader.Read());
            Assert.AreEqual(JsonToken.StartObject, reader.TokenType);

            Assert.IsTrue(reader.Read());
            Assert.AreEqual(JsonToken.PropertyName, reader.TokenType);

            Assert.IsTrue(reader.Read());
            Assert.AreEqual(JsonToken.Bytes, reader.TokenType);
            CollectionAssert.AreEquivalent(oid, (byte[])reader.Value);

            Assert.IsTrue(reader.Read());
            Assert.AreEqual(JsonToken.EndObject, reader.TokenType);
        }
示例#6
0
 /// <summary>
 /// Decodes a message from the specified memory stream.
 /// </summary>
 /// <param name="stream">The memory stream.</param>
 /// <returns></returns>
 public override object Decode(MemoryStream stream)
 {
     using (BsonDataReader reader = new BsonDataReader(stream))
     {
         return(_serializer.Deserialize(reader));
     }
 }
示例#7
0
 public T Deserialize <T>()
 {
     using (var mr = new MemoryStream(contents))
         using (var br = new BsonDataReader(mr)) {
             return(JsonSerializer.CreateDefault().Deserialize <T>(br));
         }
 }
示例#8
0
 /// TODO BE REMOVED!
 private static IEnumerable <QsNamespace> ReadBinary(string file)
 {
     using var stream            = new MemoryStream(File.ReadAllBytes(Path.GetFullPath(file)));
     using var reader            = new BsonDataReader(stream);
     reader.ReadRootValueAsArray = false;
     return(Json.Serializer.Deserialize <QsCompilation>(reader).Namespaces);
 }
示例#9
0
        internal override async Task <int> Transform(Stream input, Stream output, CancellationToken cancellationToken)
        {
            JObject obj;

            using (var reader = new BsonDataReader(input, IsArray, DateTimeKindHandling))
            {
                obj = await JObject.LoadAsync(reader, cancellationToken)
                      .ConfigureAwait(false);
            }

            var enc    = AddBom ? Encoding.UTF8 : Encodings.Utf8NoBom;
            var writer = new JsonTextWriter(new StreamWriter(output, enc, 1024, true));

            if (IndentOutput)
            {
                writer.Formatting = Formatting.Indented;
            }

            using (writer)
            {
                await obj.WriteToAsync(writer, cancellationToken).ConfigureAwait(false);
            }

            return(ExitCodes.Ok);
        }
示例#10
0
        static void MemoryToJSON(JsonWriter writer, MemoryStream input)
        {
            BinaryReader reader = new BinaryReader(input);
            int          count  = reader.ReadInt32();

            writer.WritePropertyName("MemoryList");
            writer.WriteStartArray();
            for (int i = 0; i < count; i++)
            {
                writer.WriteStartObject();
                writer.WriteNameValue("Key", reader.ReadString());
                writer.WriteNameValue("Scope", reader.ReadInt32());
                string type = reader.ReadString();
                writer.WriteNameValue("Type", type);

                using (var bson = new BsonDataReader(reader)
                {
                    CloseInput = false, ReadRootValueAsArray = true
                }) {
                    writer.WritePropertyName("Value");
                    writer.WriteToken(bson);
                }
                writer.WriteEndObject();
            }
            writer.WriteEndArray();
            NamedObjectToJSON(CopyBSONToJSON, writer, reader, "VariableReference");
            NamedObjectToJSON(CopyBSONToJSON, writer, reader, "Flags");
        }
示例#11
0
        public static T DeserializeObject <T>(byte[] value)
        {
            using var stream = new MemoryStream(value);
            using var reader = new BsonDataReader(stream);

            return(new JsonSerializer().Deserialize <T>(reader));
        }
示例#12
0
        static void Main(string[] args)
        {
            byte[] byteArray = null;
            byteArray = File.ReadAllBytes(file);
            var prettifiedData = new Tuple <int, byte[]>(0, byteArray);

            Stopwatch sw         = Stopwatch.StartNew();
            var       dataASJson = JsonConvert.SerializeObject(byteArray);

            Console.WriteLine(sw.ElapsedMilliseconds);
            sw.Restart();
            File.WriteAllText(fileAsJson, dataASJson);


            using (MemoryStream memStream = new MemoryStream())
            {
                using (BsonDataWriter writer = new BsonDataWriter(memStream))
                {
                    using (FileStream fileStream = new FileStream(fileAsBson, FileMode.Create, FileAccess.Write))
                    {
                        JsonSerializer serializer = new JsonSerializer();
                        serializer.Serialize(writer, prettifiedData);
                        Console.WriteLine(sw.ElapsedMilliseconds);
                        memStream.Position = 0;
                        memStream.CopyTo(fileStream);
                    }
                }
            }

            Console.WriteLine("Чтение файла в виде Bson.");

            byteArray = File.ReadAllBytes(fileAsBson);
            sw.Restart();
            using (MemoryStream memStream = new MemoryStream(byteArray))
            {
                using (BsonDataReader writer = new BsonDataReader(memStream))
                {
                    using (FileStream fileStream = new FileStream(fileAsBsonDeserialized, FileMode.Create, FileAccess.Write))
                    {
                        JsonSerializer serializer = new JsonSerializer();
                        serializer.Deserialize <Tuple <int, byte[]> >(writer);
                        Console.WriteLine(sw.ElapsedMilliseconds);
                        memStream.Position = 0;
                        memStream.CopyTo(fileStream);
                    }
                }
            }

            Console.WriteLine("Чтение файла в виде Json.");

            var jsonFile = File.ReadAllText(fileAsJson);

            sw.Restart();
            byteArray = JsonConvert.DeserializeObject <byte[]>(jsonFile);
            Console.WriteLine(sw.ElapsedMilliseconds);

            File.WriteAllBytes(fileAsJsonDeserialized, byteArray);

            Console.ReadLine();
        }
示例#13
0
        T ReadBsonMessage <T>()
        {
            //TODO: Remove these debugging checks once we're done investigating https://trello.com/c/0gHf4v7m/2974-null-ref-exceptions-in-halibut
            if (stream == null)
            {
                throw new Exception("stream is null");
            }
            if (serializer == null)
            {
                throw new Exception("serializer is null");
            }

            using (var zip = new DeflateStream(stream, CompressionMode.Decompress, true))
                using (var bson = new BsonDataReader(zip)
                {
                    CloseInput = false
                })
                {
                    var messageEnvelope = serializer.Deserialize <MessageEnvelope>(bson);
                    if (messageEnvelope == null)
                    {
                        throw new Exception("messageEnvelope is null");
                    }

                    return((T)messageEnvelope.Message);
                }
        }
示例#14
0
 public object Deserialize(byte[] data, MessageEncoding encoding)
 {
     using (var stream = new MemoryStream(data))
     {
         if (encoding == MessageEncoding.Json)
         {
             using (var reader = new JsonTextReader(new StreamReader(stream, Encoding.UTF8)))
             {
                 return(_jsonSerializer.Deserialize(reader, typeof(object)));
             }
         }
         else if (encoding == MessageEncoding.Bson)
         {
             using (var reader = new BsonDataReader(stream))
             {
                 return(_jsonSerializer.Deserialize(reader, typeof(object)));
             }
         }
         else if (encoding == MessageEncoding.BinarySerialized)
         {
             return(_binaryFormatter.Deserialize(stream));
         }
         else
         {
             throw new UnsupportedEncodingException();
         }
     }
 }
示例#15
0
        public virtual T Deserialize <T>(CacheItem item)
        {
            if (typeof(T).GetTypeCode() != TypeCode.Object || typeof(T) == typeof(Byte[]))
            {
                var value = Deserialize(item);
                if (value != null)
                {
                    if (typeof(T) == typeof(Guid))
                    {
                        return((T)(object)new Guid((string)value));
                    }
                    else
                    {
                        return((T)value);
                    }
                }
                else
                {
                    return(default(T));
                }
            }

            using (var ms = new MemoryStream(item.Data.ToArray()))
            {
                using (var reader = new BsonDataReader(ms))
                {
                    if (typeof(T).GetTypeInfo().ImplementedInterfaces.Contains(typeof(IEnumerable)))
                    {
                        reader.ReadRootValueAsArray = true;
                    }
                    var serializer = new JsonSerializer();
                    return(serializer.Deserialize <T>(reader));
                }
            }
        }
示例#16
0
 public virtual T Deserialize <T>(Stream input)
 {
     using (var reader = new BsonDataReader(input, IsArray(typeof(T)), DateTimeKind.Utc))
     {
         return(Deserialize <T>(reader));
     }
 }
示例#17
0
            public async Task <bool> SendAsync(string topic, byte[] payload, bool retain = false)
            {
                const string rpcCall = "$upstream/rpc/";

                if (topic.StartsWith(rpcCall))
                {
                    var guid = topic.Substring(rpcCall.Length);
                    await dispatcher.HandleAsync(new MqttPublishInfo("$downstream/rpc/ack/" + guid, new byte[0]));

                    var packet = default(RpcPacket);
                    using (var reader = new BsonDataReader(new MemoryStream(payload)))
                    {
                        var serializer = new JsonSerializer
                        {
                            ContractResolver = new DefaultContractResolver
                            {
                                NamingStrategy = new CamelCaseNamingStrategy()
                            }
                        };

                        packet = serializer.Deserialize <RpcPacket>(reader);
                    }

                    this.spy.ForEach(s => s(packet));
                }

                return(true);
            }
示例#18
0
        public ConsumeContext Deserialize(ReceiveContext receiveContext)
        {
            try
            {
                using (var body = receiveContext.GetBodyStream())
                {
                    using (var disposingCryptoStream = _cryptoStreamProvider.GetDecryptStream(body, receiveContext))
                    {
                        using (var jsonReader = new BsonDataReader(disposingCryptoStream))
                        {
                            var messageEnvelope = _deserializer.Deserialize <MessageEnvelope>(jsonReader);

                            return(new JsonConsumeContext(_deserializer, _objectTypeDeserializer, receiveContext,
                                                          messageEnvelope));
                        }
                    }
                }
            }
            catch (JsonSerializationException ex)
            {
                throw new SerializationException(
                          "A JSON serialization exception occurred while deserializing the message envelope", ex);
            }
            catch (SerializationException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new SerializationException("An exception occurred while deserializing the message envelope", ex);
            }
        }
示例#19
0
        public void ConvertRegexWithAllOptionsBson()
        {
            Regex regex = new Regex(
                "/",
                RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.ExplicitCapture);

            MemoryStream   ms         = new MemoryStream();
            BsonDataWriter writer     = new BsonDataWriter(ms);
            JsonSerializer serializer = new JsonSerializer();

            serializer.Converters.Add(new BsonDataRegexConverter());

            serializer.Serialize(writer, new RegexTestClass {
                Regex = regex
            });

            string expected = "14-00-00-00-0B-52-65-67-65-78-00-2F-00-69-6D-73-75-78-00-00";
            string bson     = BytesToHex(ms.ToArray());

            Assert.AreEqual(expected, bson);

            ms.Seek(0, SeekOrigin.Begin);
            BsonDataReader reader = new BsonDataReader(ms);

            serializer.Converters.Add(new BsonDataRegexConverter());

            RegexTestClass c = serializer.Deserialize <RegexTestClass>(reader);

            Assert.AreEqual("/", c.Regex.ToString());
            Assert.AreEqual(RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.ExplicitCapture, c.Regex.Options);
        }
示例#20
0
        public static TEntity DeserializeObject <TEntity>(byte[] document)
        {
            if (document == null)
            {
                throw new StorageArgumentNullException("document cannot be null");
            }

            using (MemoryStream ms = new MemoryStream(document))
            {
                JsonSerializer serializer = new JsonSerializer
                {
                    DateFormatHandling             = DateFormatHandling.IsoDateFormat,
                    NullValueHandling              = NullValueHandling.Ignore,
                    DateTimeZoneHandling           = DateTimeZoneHandling.Utc,
                    DateParseHandling              = DateParseHandling.DateTime,
                    TypeNameHandling               = TypeNameHandling.Auto,
                    TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple
                };

                using (BsonDataReader reader = new BsonDataReader(ms, false, DateTimeKind.Utc))
                {
                    TEntity entity = serializer.Deserialize <TEntity>(reader);
                    return(entity);
                }
            }
        }
示例#21
0
 public object Deserialize(Type type)
 {
     using (var mr = new MemoryStream(contents))
         using (var br = new BsonDataReader(mr)) {
             return(JsonSerializer.CreateDefault().Deserialize(br, type));
         }
 }
示例#22
0
 public object Deserialize(Stream input, Type type)
 {
     using (var reader = new BsonDataReader(input))
     {
         return(this.serializer.Deserialize(reader, type));
     }
 }
示例#23
0
        public void WriteBytes()
        {
            byte[] data = Encoding.UTF8.GetBytes("Hello world!");

            MemoryStream   ms     = new MemoryStream();
            BsonDataWriter writer = new BsonDataWriter(ms);

            writer.WriteStartArray();
            writer.WriteValue("a");
            writer.WriteValue("b");
            writer.WriteValue(data);
            writer.WriteEndArray();

            writer.Flush();

            ms.Seek(0, SeekOrigin.Begin);

            string expected = "2B-00-00-00-02-30-00-02-00-00-00-61-00-02-31-00-02-00-00-00-62-00-05-32-00-0C-00-00-00-00-48-65-6C-6C-6F-20-77-6F-72-6C-64-21-00";
            string bson     = BytesToHex(ms.ToArray());

            Assert.AreEqual(expected, bson);

            BsonDataReader reader = new BsonDataReader(new MemoryStream(ms.ToArray()));

            reader.ReadRootValueAsArray = true;
            reader.Read();
            reader.Read();
            reader.Read();
            reader.Read();
            Assert.AreEqual(JsonToken.Bytes, reader.TokenType);
            CollectionAssert.AreEquivalent(data, (byte[])reader.Value);
        }
示例#24
0
        public static void Bson_ValueOnly <TItem>(TItem value, Action <JsonWriter, TItem> write, Func <JsonReader, Database, TItem> read)
        {
            TItem roundTripped = default;

            using (MemoryStream stream = new MemoryStream())
            {
                using (BinaryWriter bw = new BinaryWriter(stream, Encoding.UTF8, leaveOpen: true))
                    using (BsonDataWriter bdw = new BsonDataWriter(bw))
                    {
                        // Write value alone
                        write(bdw, value);
                    }

                long bytesWritten = stream.Position;
                stream.Seek(0, SeekOrigin.Begin);

                using (BinaryReader br = new BinaryReader(stream, Encoding.UTF8, leaveOpen: true))
                    using (BsonDataReader bdr = new BsonDataReader(br))
                    {
                        bdr.Read();

                        // Read value
                        roundTripped = read(bdr, default(Database));
                    }

                // Ensure everything written is read back
                Assert.Equal(bytesWritten, stream.Position);

                // Ensure value returned matches value written
                Assert.Equal(value, roundTripped);
            }
        }
示例#25
0
        public void SerializeEmptyAndNullStrings()
        {
            Product p = new Product();

            p.ExpiryDate = DateTime.Parse("2009-04-05T14:45:00Z");
            p.Name       = null;
            p.Price      = 9.95m;
            p.Sizes      = new[] { "Small", "", null };

            MemoryStream   ms         = new MemoryStream();
            JsonSerializer serializer = new JsonSerializer();

            BsonDataWriter writer = new BsonDataWriter(ms);

            serializer.Serialize(writer, p);

            ms.Seek(0, SeekOrigin.Begin);

            BsonDataReader reader = new BsonDataReader(ms);
            Product        deserializedProduct = serializer.Deserialize <Product>(reader);

            Console.WriteLine(deserializedProduct.Name);

            Assert.AreEqual(null, deserializedProduct.Name);
            Assert.AreEqual(9.95m, deserializedProduct.Price);
            Assert.AreEqual(3, deserializedProduct.Sizes.Length);
            Assert.AreEqual("Small", deserializedProduct.Sizes[0]);
            Assert.AreEqual("", deserializedProduct.Sizes[1]);
            Assert.AreEqual(null, deserializedProduct.Sizes[2]);
        }
        /// <summary>
        /// Deserialize bson string to given object type
        /// </summary>
        /// <typeparam name="T">Object type</typeparam>
        /// <param name="value">Value will be deserialized</param>
        /// <returns>Deserialized object</returns>
        private static T DeserializeFromBson <T>(this string value)
        {
            if (string.IsNullOrEmpty(value))
            {
                return(default(T));
            }

            try
            {
                var data = Convert.FromBase64String(value);
                using (var ms = new MemoryStream(data))
                {
                    using (var reader = new BsonDataReader(ms))
                    {
                        var serializer = new JsonSerializer();
                        return(serializer.Deserialize <T>(reader));
                    }
                }
            }
            catch (Exception)
            {
                //Change type to string if there is an exception and type of T is string
                if (typeof(T) == typeof(string))
                {
                    return((T)Convert.ChangeType(value, typeof(T)));
                }
                //Otherwise return default of T
                else
                {
                    return(default(T));
                }
            }
        }
示例#27
0
        ConsumeContext IMessageDeserializer.Deserialize(ReceiveContext receiveContext)
        {
            try
            {
                MessageEnvelope envelope;
                using (var body = receiveContext.GetBodyStream())
                    using (var jsonReader = new BsonDataReader(body))
                    {
                        envelope = _deserializer.Deserialize <MessageEnvelope>(jsonReader);
                    }

                return(new JsonConsumeContext(_deserializer, receiveContext, envelope));
            }
            catch (JsonSerializationException ex)
            {
                throw new SerializationException("A JSON serialization exception occurred while deserializing the message envelope", ex);
            }
            catch (SerializationException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new SerializationException("An exception occurred while deserializing the message envelope", ex);
            }
        }
        IObservable <T> DeserializeObject <T>(byte[] data)
        {
            var settings = Locator.Current.GetService <JsonSerializerSettings>() ?? new JsonSerializerSettings();

            settings.ContractResolver = new JsonDateTimeContractResolver(settings?.ContractResolver); // This will make us use ticks instead of json ticks for DateTime.
            var serializer         = JsonSerializer.Create(settings);
            var reader             = new BsonDataReader(new MemoryStream(data));
            var forcedDateTimeKind = BlobCache.ForcedDateTimeKind;

            if (forcedDateTimeKind.HasValue)
            {
                reader.DateTimeKindHandling = forcedDateTimeKind.Value;
            }

            try
            {
                try
                {
                    var boxedVal = serializer.Deserialize <ObjectWrapper <T> >(reader).Value;
                    return(Observable.Return(boxedVal));
                }
                catch (Exception ex)
                {
                    this.Log().WarnException("Failed to deserialize data as boxed, we may be migrating from an old Akavache", ex);
                }

                var rawVal = serializer.Deserialize <T>(reader);
                return(Observable.Return(rawVal));
            }
            catch (Exception ex)
            {
                return(Observable.Throw <T>(ex));
            }
        }
        public void bson_serialize_message_test()
        {
            var          prop1 = "prop1";
            var          prop2 = "prop2";
            var          msg   = new WoftamEvent(prop1, prop2);
            MemoryStream ms    = new MemoryStream();
            var          bs    = new BsonDataWriter(ms);

            bs.WriteStartObject();
            bs.WritePropertyName(msg.GetType().FullName);
            bs.WriteValue(JsonConvert.SerializeObject(msg));
            bs.WriteEnd();
             
            ms.Seek(0, SeekOrigin.Begin);

            Message msg2;
            var     reader = new BsonDataReader(ms);

            // read object
            reader.Read();
            // read type name
            reader.Read();
            var messageType = MessageHierarchy.GetTypeByFullName((string)reader.Value);

            reader.Read(); //property value
            msg2 = (Message)JsonConvert.DeserializeObject((string)reader.Value, messageType);
            Assert.IsType <WoftamEvent>(msg2);
            Assert.Equal(prop1, ((WoftamEvent)msg2).Property1);
        }
示例#30
0
        public T restoreObject <T>(Stream stream, SaverOutputType format)
        {
            stream = new NoCloseStream(stream);
            switch (format)
            {
            case SaverOutputType.Json:
                using (var reader = new JsonTextReader(new StreamReader(stream)))
                {
                    return(jsonSaver.Value.restoreObject <T>(reader));
                }

            case SaverOutputType.Bson:
                using (var reader = new BsonDataReader(stream)
                {
                    ReadRootValueAsArray = true
                })
                {
                    return(jsonSaver.Value.restoreObject <T>(reader));
                }

            case SaverOutputType.Xml:
                using (var reader = new XmlTextReader(stream))
                {
                    return((T)xmlSaver.Value.restoreObject(reader));
                }

            default:
                throw new NotImplementedException($"{nameof(SaverOutputType)} format {format} not supported.");
            }
        }