Skip to content

Commit 168088b

Browse files
authored
Merge pull request #15 from hughesjs/ignore-xmlns
Fix: Ignore xmlns
2 parents 764986e + 20cbd48 commit 168088b

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

src/UniversalDiveDataFormat.Tests/Services/UddfDeserialiserTests.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,5 +184,18 @@ public void CanDeserialiseNonRootObject()
184184
Image image = _uddfDeserialiser.Deserialise<Image>(xml);
185185
image.Id.ShouldBe("img_flatfeet");
186186
image.ObjectName.ShouldBe("flatfeet.jpg");
187-
}
187+
}
188+
189+
[Fact]
190+
public void CanDeserialiseWithNamespace()
191+
{
192+
const string xml = """
193+
<uddf version="3.2.0" xmlns="http://www.streit.cc/uddf/3.2/">
194+
<mediadata>
195+
196+
</mediadata>
197+
</uddf>
198+
""";
199+
Should.NotThrow(() => _uddfDeserialiser.Deserialise<UniversalDiveDataFormatRoot>(xml));
200+
}
188201
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System.Xml;
2+
3+
namespace UniversalDiveDataFormat.Services;
4+
5+
// This is needed because not all sources set the xmlns correctly
6+
public class NamespaceIgnorantXmlTextReader : XmlTextReader
7+
{
8+
public NamespaceIgnorantXmlTextReader(TextReader reader): base(reader) { }
9+
public NamespaceIgnorantXmlTextReader(Stream stream): base(stream) { }
10+
11+
public override string NamespaceURI => string.Empty;
12+
}

src/UniversalDiveDataFormat/Services/UddfDeserialiser.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Xml;
12
using System.Xml.Serialization;
23
using UniversalDiveDataFormat.Models;
34

@@ -6,6 +7,7 @@ namespace UniversalDiveDataFormat.Services;
67
public class UddfDeserialiser: IUddfDeserialiser
78
{
89
private readonly LinkResolutionService _linkResolutionService;
10+
911
public UddfDeserialiser(LinkResolutionService linkResolutionService)
1012
{
1113
_linkResolutionService = linkResolutionService;
@@ -16,15 +18,19 @@ public UddfDeserialiser(LinkResolutionService linkResolutionService)
1618
public T Deserialise<T>(TextReader reader) where T : UddfModel
1719
{
1820
XmlSerializer serializer = new(typeof(T));
19-
T obj = (T)serializer.Deserialize(reader)!; // This should throw if the xml is invalid
21+
XmlReader xmlReader = new NamespaceIgnorantXmlTextReader(reader);
22+
23+
T obj = (T)serializer.Deserialize(xmlReader)!; // This should throw if the xml is invalid
2024
_linkResolutionService.ResolveAllLinksInObjectGraph(obj);
2125
return obj;
2226
}
2327

2428
public T Deserialise<T>(Stream stream) where T : UddfModel
2529
{
2630
XmlSerializer serializer = new(typeof(T));
27-
T obj = (T)serializer.Deserialize(stream)!; // This should throw if the xml is invalid
31+
XmlReader xmlReader = new NamespaceIgnorantXmlTextReader(stream);
32+
33+
T obj = (T)serializer.Deserialize(xmlReader)!; // This should throw if the xml is invalid
2834
_linkResolutionService.ResolveAllLinksInObjectGraph(obj);
2935
return obj;
3036
}

0 commit comments

Comments
 (0)