public void deserialize()
    {
      Assert.Throws<ArgumentNullException>(() => XmlExtensions.Deserialize<object>(null));
      Assert.Throws<InvalidOperationException>(() => new StringReader(string.Empty).XmlReader(true).Deserialize<object>());

      var serialized = Guid.NewGuid().ToString();
      var xml = new StringWriter().Do(writer =>
      {
        new XmlSerializer(serialized.GetType()).Serialize(writer, serialized);
        return writer.ToString();
      });
      
      var xmlReader = new StringReader(xml);
      using (var reader = new StringReader(xml).XmlReader(true))
      {
        var deserialized = reader.Deserialize(serialized.GetType());
        Assert.False(ReferenceEquals(serialized, deserialized));
        Assert.Equal(serialized, deserialized);
      }
      xmlReader.ReadToEnd();
      xmlReader.Close();

      xmlReader = new StringReader(xml);
      using (var reader = xmlReader.XmlReader(true))
      {
        var deserialized = reader.Deserialize(serialized.GetType());
        Assert.False(ReferenceEquals(serialized, deserialized));
        Assert.Equal(serialized, deserialized);
        Assert.False(reader.Read());
        Assert.Equal(-1, xmlReader.Read());
      }

      Assert.Equal(serialized, new StringReader(xml).XmlReader(true).Deserialize<string>());
    }