diff --git a/Minio.Tests/UtilsTest.cs b/Minio.Tests/UtilsTest.cs
index c03a0da87..643d6435b 100644
--- a/Minio.Tests/UtilsTest.cs
+++ b/Minio.Tests/UtilsTest.cs
@@ -18,6 +18,7 @@
using System.Xml.Serialization;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Minio.DataModel;
+using Minio.DataModel.Result;
using Minio.Exceptions;
using Minio.Helper;
@@ -235,4 +236,22 @@ public void TestisValidEndpoint()
Assert.IsTrue(RequestUtil.IsValidEndpoint("A.domain.com"));
Assert.IsTrue(RequestUtil.IsValidEndpoint("A.domain1.com"));
}
+
+ [TestMethod]
+ public void TestXmlResultWithoutNamespace()
+ {
+ var xml = """
+
+
+
+ 2022-10-29T15:34:41.626Z
+
+
+ "ead3fcd881dee32547f1b6ca1fc29463"
+
+
+ """;
+ var result = Utils.DeserializeXml(xml);
+ Assert.IsNotNull(result);
+ }
}
diff --git a/Minio/Helper/AmazonAwsS3XmlReader.cs b/Minio/Helper/AmazonAwsS3XmlReader.cs
index 7ddafe913..ef7f63c27 100644
--- a/Minio/Helper/AmazonAwsS3XmlReader.cs
+++ b/Minio/Helper/AmazonAwsS3XmlReader.cs
@@ -24,5 +24,9 @@ public AmazonAwsS3XmlReader(Stream stream) : base(stream)
{
}
+ public AmazonAwsS3XmlReader(TextReader textReader) : base(textReader)
+ {
+ }
+
public override string NamespaceURI => "http://s3.amazonaws.com/doc/2006-03-01/";
}
diff --git a/Minio/Helper/Utils.cs b/Minio/Helper/Utils.cs
index 4076342f1..42a187d56 100644
--- a/Minio/Helper/Utils.cs
+++ b/Minio/Helper/Utils.cs
@@ -1050,13 +1050,29 @@ public static string SerializeToXml(T anyobject) where T : class
using var reader = new StreamReader(stream);
var xmlContent = reader.ReadToEnd();
- return DeserializeXml(xmlContent); // Call the string overload
+ return DeserializeNonS3Xml(xmlContent); // Fallback to generic XML deserialization
}
public static T DeserializeXml(string xml) where T : class, new()
{
if (string.IsNullOrEmpty(xml)) return default;
+ var ns = GetNamespace();
+ if (!string.IsNullOrWhiteSpace(ns) && string.Equals(ns, "http://s3.amazonaws.com/doc/2006-03-01/",
+ StringComparison.OrdinalIgnoreCase))
+ {
+ using var stringReader = new StringReader(xml);
+ using var amazonAwsS3XmlReader = new AmazonAwsS3XmlReader(stringReader);
+ return (T)new XmlSerializer(typeof(T)).Deserialize(amazonAwsS3XmlReader);
+ }
+
+ return DeserializeNonS3Xml(xml); // Fallback to generic XML deserialization
+ }
+
+ private static T DeserializeNonS3Xml(string xml) where T : class, new()
+ {
+ if (string.IsNullOrEmpty(xml)) return default;
+
var settings = new XmlReaderSettings
{
// Disable DTD processing