| @@ -10,6 +10,7 @@ using System; | |||||
| using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Diagnostics; | using System.Diagnostics; | ||||
| using System.IO; | |||||
| using System.Linq; | using System.Linq; | ||||
| using System.Net; | using System.Net; | ||||
| using System.Net.Sockets; | using System.Net.Sockets; | ||||
| @@ -402,7 +403,11 @@ namespace Discord.Net.WebSockets | |||||
| protected override async Task ProcessMessage(string json) | protected override async Task ProcessMessage(string json) | ||||
| { | { | ||||
| await base.ProcessMessage(json).ConfigureAwait(false); | await base.ProcessMessage(json).ConfigureAwait(false); | ||||
| var msg = JsonConvert.DeserializeObject<WebSocketMessage>(json); | |||||
| WebSocketMessage msg; | |||||
| using (var reader = new JsonTextReader(new StringReader(json))) | |||||
| msg = _serializer.Deserialize(reader, typeof(WebSocketMessage)) as WebSocketMessage; | |||||
| var opCode = (OpCodes)msg.Operation; | var opCode = (OpCodes)msg.Operation; | ||||
| switch (opCode) | switch (opCode) | ||||
| { | { | ||||
| @@ -1,22 +1,23 @@ | |||||
| using Discord.Logging; | using Discord.Logging; | ||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| using System.IO; | |||||
| namespace Discord.Net.Rest | namespace Discord.Net.Rest | ||||
| { | { | ||||
| public class JsonRestClient : RestClient | public class JsonRestClient : RestClient | ||||
| { | { | ||||
| private JsonSerializerSettings _deserializeSettings; | |||||
| private JsonSerializer _serializer; | |||||
| public JsonRestClient(DiscordConfig config, string baseUrl, Logger logger) | public JsonRestClient(DiscordConfig config, string baseUrl, Logger logger) | ||||
| : base(config, baseUrl, logger) | : base(config, baseUrl, logger) | ||||
| { | { | ||||
| _deserializeSettings = new JsonSerializerSettings(); | |||||
| _serializer = new JsonSerializer(); | |||||
| #if TEST_RESPONSES | #if TEST_RESPONSES | ||||
| _deserializeSettings.CheckAdditionalContent = true; | |||||
| _deserializeSettings.MissingMemberHandling = MissingMemberHandling.Error; | |||||
| _serializer.CheckAdditionalContent = true; | |||||
| _serializer.MissingMemberHandling = MissingMemberHandling.Error; | |||||
| #else | #else | ||||
| _deserializeSettings.CheckAdditionalContent = false; | |||||
| _deserializeSettings.MissingMemberHandling = MissingMemberHandling.Ignore; | |||||
| _serializer.CheckAdditionalContent = false; | |||||
| _serializer.MissingMemberHandling = MissingMemberHandling.Ignore; | |||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -31,7 +32,8 @@ namespace Discord.Net.Rest | |||||
| if (string.IsNullOrEmpty(json)) | if (string.IsNullOrEmpty(json)) | ||||
| throw new Exception("API check failed: Response is empty."); | throw new Exception("API check failed: Response is empty."); | ||||
| #endif | #endif | ||||
| return JsonConvert.DeserializeObject<T>(json, _deserializeSettings); | |||||
| using (var reader = new JsonTextReader(new StringReader(json))) | |||||
| return (T)_serializer.Deserialize(reader, typeof(T)); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -7,6 +7,7 @@ using Newtonsoft.Json; | |||||
| using Newtonsoft.Json.Linq; | using Newtonsoft.Json.Linq; | ||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.IO; | |||||
| using System.Threading; | using System.Threading; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| @@ -103,7 +104,11 @@ namespace Discord.Net.WebSockets | |||||
| protected override async Task ProcessMessage(string json) | protected override async Task ProcessMessage(string json) | ||||
| { | { | ||||
| base.ProcessMessage(json).GetAwaiter().GetResult(); //This is just a CompletedTask, and we need to avoid asyncs in here | base.ProcessMessage(json).GetAwaiter().GetResult(); //This is just a CompletedTask, and we need to avoid asyncs in here | ||||
| var msg = JsonConvert.DeserializeObject<WebSocketMessage>(json); | |||||
| WebSocketMessage msg; | |||||
| using (var reader = new JsonTextReader(new StringReader(json))) | |||||
| msg = _serializer.Deserialize(reader, typeof(WebSocketMessage)) as WebSocketMessage; | |||||
| if (msg.Sequence.HasValue) | if (msg.Sequence.HasValue) | ||||
| _lastSequence = msg.Sequence.Value; | _lastSequence = msg.Sequence.Value; | ||||