using System; using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; namespace NzbDrone.Common { public interface IJsonSerializer { T Deserialize(string json) where T : class, new(); string Serialize(object obj); void Serialize(TModel model, Stream outputStream); object Deserialize(string json, Type type); } public class JsonSerializer : IJsonSerializer { private readonly Newtonsoft.Json.JsonSerializer _jsonNetSerializer; public JsonSerializer() { var setting = new JsonSerializerSettings { DateTimeZoneHandling = DateTimeZoneHandling.Utc, NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented, DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate }; _jsonNetSerializer = new Newtonsoft.Json.JsonSerializer() { DateTimeZoneHandling = setting.DateTimeZoneHandling, NullValueHandling = setting.NullValueHandling, Formatting = setting.Formatting, DefaultValueHandling = setting.DefaultValueHandling, ContractResolver = new CamelCasePropertyNamesContractResolver() }; } public T Deserialize(string json) where T : class, new() { return JsonConvert.DeserializeObject(json); } public object Deserialize(string json, Type type) { return JsonConvert.DeserializeObject(json, type); } public string Serialize(object obj) { return JsonConvert.SerializeObject(obj); } public void Serialize(TModel model, Stream outputStream) { var jsonTextWriter = new JsonTextWriter(new StreamWriter(outputStream)); _jsonNetSerializer.Serialize(jsonTextWriter, model); jsonTextWriter.Flush(); } } }