41
41
42
42
namespace DFe . Utils
43
43
{
44
- public static class FuncoesXml
45
- {
46
-
47
- // https://github.com/ZeusAutomacao/DFe.NET/issues/610
48
- private static readonly Hashtable CacheSerializers = new Hashtable ( ) ;
49
-
50
- /// <summary>
51
- /// Serializa a classe passada para uma string no form
52
- /// </summary>
53
- /// <typeparam name="T"></typeparam>
54
- /// <param name="objeto"></param>
55
- /// <returns></returns>
56
- public static string ClasseParaXmlString < T > ( T objeto )
44
+ public static class FuncoesXml
45
+ {
46
+
47
+ // https://github.com/ZeusAutomacao/DFe.NET/issues/610
48
+ private static readonly object _lock = new object ( ) ;
49
+ private static volatile Hashtable _cacheSerializers = new Hashtable ( ) ;
50
+
51
+ /// <summary>
52
+ /// Serializa a classe passada para uma string no form
53
+ /// </summary>
54
+ /// <typeparam name="T"></typeparam>
55
+ /// <param name="objeto"></param>
56
+ /// <returns></returns>
57
+ public static string ClasseParaXmlString < T > ( T objeto )
57
58
{
58
59
XElement xml ;
59
60
var keyNomeClasseEmUso = typeof ( T ) . FullName ;
@@ -224,16 +225,18 @@ public static string ObterNodeDeStringXml(string nomeDoNode, string stringXml)
224
225
// https://github.com/ZeusAutomacao/DFe.NET/issues/610
225
226
private static XmlSerializer BuscarNoCache ( string chave , Type type )
226
227
{
227
- if ( CacheSerializers . Contains ( chave ) )
228
- {
229
- return ( XmlSerializer ) CacheSerializers [ chave ] ;
230
- }
231
-
232
-
233
- var ser = XmlSerializer . FromTypes ( new [ ] { type } ) [ 0 ] ;
234
- CacheSerializers . Add ( chave , ser ) ;
235
-
236
- return ser ;
228
+ lock ( _lock )
229
+ {
230
+ if ( _cacheSerializers . Contains ( chave ) )
231
+ {
232
+ return ( XmlSerializer ) _cacheSerializers [ chave ] ;
233
+ }
234
+
235
+ var ser = XmlSerializer . FromTypes ( new [ ] { type } ) [ 0 ] ;
236
+ _cacheSerializers . Add ( chave , ser ) ;
237
+
238
+ return ser ;
239
+ }
237
240
}
238
241
}
239
242
}
0 commit comments