From 955ae9128bf100278a60018dedfb3d7310c76b93 Mon Sep 17 00:00:00 2001 From: Jaex Date: Tue, 29 Sep 2020 18:10:37 +0300 Subject: [PATCH] JsonHelpers refactor --- ShareX.HelpersLib/Helpers/JsonHelpers.cs | 69 +++++++++++++++--------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/ShareX.HelpersLib/Helpers/JsonHelpers.cs b/ShareX.HelpersLib/Helpers/JsonHelpers.cs index 4761ce7f2..7ceea6293 100644 --- a/ShareX.HelpersLib/Helpers/JsonHelpers.cs +++ b/ShareX.HelpersLib/Helpers/JsonHelpers.cs @@ -36,18 +36,21 @@ public static class JsonHelpers public static void Serialize(T obj, TextWriter textWriter, DefaultValueHandling defaultValueHandling = DefaultValueHandling.Include, NullValueHandling nullValueHandling = NullValueHandling.Include, ISerializationBinder serializationBinder = null) { - using (JsonTextWriter jsonTextWriter = new JsonTextWriter(textWriter)) + if (textWriter != null) { - jsonTextWriter.Formatting = Formatting.Indented; + using (JsonTextWriter jsonTextWriter = new JsonTextWriter(textWriter)) + { + jsonTextWriter.Formatting = Formatting.Indented; - JsonSerializer serializer = new JsonSerializer(); - serializer.ContractResolver = new WritablePropertiesOnlyResolver(); - serializer.Converters.Add(new StringEnumConverter()); - serializer.DefaultValueHandling = defaultValueHandling; - serializer.NullValueHandling = nullValueHandling; - serializer.TypeNameHandling = TypeNameHandling.Auto; - if (serializationBinder != null) serializer.SerializationBinder = serializationBinder; - serializer.Serialize(jsonTextWriter, obj); + JsonSerializer serializer = new JsonSerializer(); + serializer.ContractResolver = new WritablePropertiesOnlyResolver(); + serializer.Converters.Add(new StringEnumConverter()); + serializer.DefaultValueHandling = defaultValueHandling; + serializer.NullValueHandling = nullValueHandling; + serializer.TypeNameHandling = TypeNameHandling.Auto; + if (serializationBinder != null) serializer.SerializationBinder = serializationBinder; + serializer.Serialize(jsonTextWriter, obj); + } } } @@ -67,9 +70,12 @@ public static class JsonHelpers public static void SerializeToStream(T obj, Stream stream, DefaultValueHandling defaultValueHandling = DefaultValueHandling.Include, NullValueHandling nullValueHandling = NullValueHandling.Include, ISerializationBinder serializationBinder = null) { - using (StreamWriter streamWriter = new StreamWriter(stream)) + if (stream != null) { - Serialize(obj, streamWriter, defaultValueHandling, nullValueHandling, serializationBinder); + using (StreamWriter streamWriter = new StreamWriter(stream)) + { + Serialize(obj, streamWriter, defaultValueHandling, nullValueHandling, serializationBinder); + } } } @@ -97,16 +103,21 @@ public static class JsonHelpers public static T Deserialize(TextReader textReader, ISerializationBinder serializationBinder = null) { - using (JsonTextReader jsonTextReader = new JsonTextReader(textReader)) + if (textReader != null) { - JsonSerializer serializer = new JsonSerializer(); - serializer.Converters.Add(new StringEnumConverter()); - serializer.ObjectCreationHandling = ObjectCreationHandling.Replace; - serializer.TypeNameHandling = TypeNameHandling.Auto; - if (serializationBinder != null) serializer.SerializationBinder = serializationBinder; - serializer.Error += (sender, e) => e.ErrorContext.Handled = true; - return serializer.Deserialize(jsonTextReader); + using (JsonTextReader jsonTextReader = new JsonTextReader(textReader)) + { + JsonSerializer serializer = new JsonSerializer(); + serializer.Converters.Add(new StringEnumConverter()); + serializer.ObjectCreationHandling = ObjectCreationHandling.Replace; + serializer.TypeNameHandling = TypeNameHandling.Auto; + if (serializationBinder != null) serializer.SerializationBinder = serializationBinder; + serializer.Error += (sender, e) => e.ErrorContext.Handled = true; + return serializer.Deserialize(jsonTextReader); + } } + + return default; } public static T DeserializeFromString(string json, ISerializationBinder serializationBinder = null) @@ -122,6 +133,19 @@ public static T DeserializeFromString(string json, ISerializationBinder seria return default; } + public static T DeserializeFromStream(Stream stream, ISerializationBinder serializationBinder = null) + { + if (stream != null) + { + using (StreamReader streamReader = new StreamReader(stream)) + { + return Deserialize(streamReader, serializationBinder); + } + } + + return default; + } + public static T DeserializeFromFile(string filePath, ISerializationBinder serializationBinder = null) { if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath)) @@ -130,10 +154,7 @@ public static T DeserializeFromFile(string filePath, ISerializationBinder ser { if (fileStream.Length > 0) { - using (StreamReader streamReader = new StreamReader(fileStream)) - { - return Deserialize(streamReader, serializationBinder); - } + return DeserializeFromStream(fileStream, serializationBinder); } } }