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; if (OptionsProvider != null) { options = OptionsProvider(); } else { options = CreateOptions(); } if (options == null) { options = new JsonSerializerSettings(); } return options; } [Obsolete("Use Options instead.")] public virtual JsonSerializerSettings CreateOptions() { return new JsonSerializerSettings(); } public Func OptionsProvider { get; set; } } }