Skip to content

Commit de950cb

Browse files
authored
Use own JSON serializer instead of a static one (#1048)
* Create own serializer with custom settings * Avoid BOM
1 parent e55dd06 commit de950cb

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

Source/EasyNetQ/JsonSerializer.cs

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,57 @@
11
using System;
2+
using System.IO;
23
using System.Text;
3-
using Newtonsoft.Json;
44

55
namespace EasyNetQ
66
{
77
public class JsonSerializer : ISerializer
88
{
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
1412
{
15-
TypeNameHandling = TypeNameHandling.Auto
13+
TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto
1614
};
15+
16+
private const int DefaultBufferSize = 1024;
17+
18+
private readonly Newtonsoft.Json.JsonSerializer jsonSerializer;
19+
20+
public JsonSerializer() : this(DefaultSerializerSettings)
21+
{
1722
}
1823

19-
public JsonSerializer(JsonSerializerSettings serializerSettings)
24+
public JsonSerializer(Newtonsoft.Json.JsonSerializerSettings serializerSettings)
2025
{
21-
this.serializerSettings = serializerSettings;
26+
jsonSerializer = Newtonsoft.Json.JsonSerializer.Create(serializerSettings);
2227
}
2328

24-
public byte[] MessageToBytes(Type messageType, object message)
29+
public byte[] MessageToBytes(Type messageType, object message)
2530
{
2631
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+
}
2844
}
2945

3046
public object BytesToMessage(Type messageType, byte[] bytes)
3147
{
3248
Preconditions.CheckNotNull(messageType, "messageType");
3349
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);
3555
}
3656
}
37-
}
57+
}

0 commit comments

Comments
 (0)