11using System ;
2+ using System . Collections . Concurrent ;
23using System . IO ;
34using System . Net . Http ;
45using System . Text ;
@@ -12,6 +13,7 @@ namespace Refit
1213 public class XmlContentSerializer : IContentSerializer
1314 {
1415 private readonly XmlContentSerializerSettings settings ;
16+ private readonly ConcurrentDictionary < Type , XmlSerializer > serializerCache = new ConcurrentDictionary < Type , XmlSerializer > ( ) ;
1517
1618 public XmlContentSerializer ( ) : this ( new XmlContentSerializerSettings ( ) )
1719 {
@@ -24,8 +26,8 @@ public XmlContentSerializer(XmlContentSerializerSettings settings)
2426
2527 public Task < HttpContent > SerializeAsync < T > ( T item )
2628 {
27- var xmlSerializer = new XmlSerializer ( item . GetType ( ) , settings . XmlAttributeOverrides ) ;
28-
29+ var xmlSerializer = serializerCache . GetOrAdd ( item . GetType ( ) , t => new XmlSerializer ( t , settings . XmlAttributeOverrides ) ) ;
30+
2931 using ( var stream = new MemoryStream ( ) )
3032 {
3133 using ( var writer = XmlWriter . Create ( stream , settings . XmlReaderWriterSettings . WriterSettings ) )
@@ -41,8 +43,8 @@ public Task<HttpContent> SerializeAsync<T>(T item)
4143
4244 public async Task < T > DeserializeAsync < T > ( HttpContent content )
4345 {
44- var xmlSerializer = new XmlSerializer ( typeof ( T ) , settings . XmlAttributeOverrides ) ;
45-
46+ var xmlSerializer = serializerCache . GetOrAdd ( typeof ( T ) , t => new XmlSerializer ( t , settings . XmlAttributeOverrides ) ) ;
47+
4648 using ( var input = new StringReader ( await content . ReadAsStringAsync ( ) . ConfigureAwait ( false ) ) )
4749 using ( var reader = XmlReader . Create ( input , settings . XmlReaderWriterSettings . ReaderSettings ) )
4850 return ( T ) xmlSerializer . Deserialize ( reader ) ;
0 commit comments