1
1
using System ;
2
+ using System . IO ;
2
3
using System . Text ;
3
- using Newtonsoft . Json ;
4
4
5
5
namespace EasyNetQ
6
6
{
7
7
public class JsonSerializer : ISerializer
8
8
{
9
- private readonly JsonSerializerSettings serializerSettings ;
10
-
11
- public JsonSerializer ( )
12
- {
13
- serializerSettings = new JsonSerializerSettings
9
+ private static readonly Encoding Encoding = new UTF8Encoding ( false ) ;
10
+ private static readonly Newtonsoft . Json . JsonSerializerSettings DefaultSerializerSettings =
11
+ new Newtonsoft . Json . JsonSerializerSettings
14
12
{
15
- TypeNameHandling = TypeNameHandling . Auto
13
+ TypeNameHandling = Newtonsoft . Json . TypeNameHandling . Auto
16
14
} ;
15
+
16
+ private const int DefaultBufferSize = 1024 ;
17
+
18
+ private readonly Newtonsoft . Json . JsonSerializer jsonSerializer ;
19
+
20
+ public JsonSerializer ( ) : this ( DefaultSerializerSettings )
21
+ {
17
22
}
18
23
19
- public JsonSerializer ( JsonSerializerSettings serializerSettings )
24
+ public JsonSerializer ( Newtonsoft . Json . JsonSerializerSettings serializerSettings )
20
25
{
21
- this . serializerSettings = serializerSettings ;
26
+ jsonSerializer = Newtonsoft . Json . JsonSerializer . Create ( serializerSettings ) ;
22
27
}
23
28
24
- public byte [ ] MessageToBytes ( Type messageType , object message )
29
+ public byte [ ] MessageToBytes ( Type messageType , object message )
25
30
{
26
31
Preconditions . CheckNotNull ( messageType , "messageType" ) ;
27
- return Encoding . UTF8 . GetBytes ( JsonConvert . SerializeObject ( message , messageType , serializerSettings ) ) ;
32
+
33
+ using ( var memoryStream = new MemoryStream ( DefaultBufferSize ) )
34
+ {
35
+ using ( var streamWriter = new StreamWriter ( memoryStream , Encoding , DefaultBufferSize , true ) )
36
+ using ( var jsonWriter = new Newtonsoft . Json . JsonTextWriter ( streamWriter ) )
37
+ {
38
+ jsonWriter . Formatting = jsonSerializer . Formatting ;
39
+ jsonSerializer . Serialize ( jsonWriter , message , messageType ) ;
40
+ }
41
+
42
+ return memoryStream . ToArray ( ) ;
43
+ }
28
44
}
29
45
30
46
public object BytesToMessage ( Type messageType , byte [ ] bytes )
31
47
{
32
48
Preconditions . CheckNotNull ( messageType , "messageType" ) ;
33
49
Preconditions . CheckNotNull ( bytes , "bytes" ) ;
34
- return JsonConvert . DeserializeObject ( Encoding . UTF8 . GetString ( bytes ) , messageType , serializerSettings ) ;
50
+
51
+ using ( var memoryStream = new MemoryStream ( bytes , false ) )
52
+ using ( var streamReader = new StreamReader ( memoryStream , Encoding , false , DefaultBufferSize , true ) )
53
+ using ( var reader = new Newtonsoft . Json . JsonTextReader ( streamReader ) )
54
+ return jsonSerializer . Deserialize ( reader , messageType ) ;
35
55
}
36
56
}
37
- }
57
+ }
0 commit comments