using System; using Newtonsoft.Json; using SocketIOClient.JsonSerializer; using System.Collections.Generic; namespace SocketIOClient.Newtonsoft.Json { public class NewtonsoftJsonSerializer : IJsonSerializer { public Func JsonSerializerOptions { get; } public JsonSerializeResult Serialize(object[] data) { var converter = new ByteArrayConverter(); var settings = GetOptions(); settings.Converters.Add(converter); string json = JsonConvert.SerializeObject(data, settings); return new JsonSerializeResult { Json = json, Bytes = converter.Bytes }; } public T Deserialize(string json) { var settings = GetOptions(); return JsonConvert.DeserializeObject(json, settings); } public T Deserialize(string json, IList bytes) { var converter = new ByteArrayConverter(); converter.Bytes.AddRange(bytes); var settings = GetOptions(); settings.Converters.Add(converter); return JsonConvert.DeserializeObject(json, settings); } private JsonSerializerSettings GetOptions() { JsonSerializerSettings options = null; if (OptionsProvider != null) { options = OptionsProvider(); } if (options == null) { options = new JsonSerializerSettings(); } return options; } public Func OptionsProvider { get; set; } } }