File tree Expand file tree Collapse file tree 3 files changed +34
-3
lines changed
UniversalDiveDataFormat.Tests/Services
UniversalDiveDataFormat/Services Expand file tree Collapse file tree 3 files changed +34
-3
lines changed Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 1+ using System . Xml ;
12using System . Xml . Serialization ;
23using UniversalDiveDataFormat . Models ;
34
@@ -6,6 +7,7 @@ namespace UniversalDiveDataFormat.Services;
67public 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 }
You can’t perform that action at this time.
0 commit comments