Browse Source

Let's not be so direct

Piotr Czajkowski 2 years ago
parent
commit
b68696c653
4 changed files with 71 additions and 10 deletions
  1. 9 0
      PSDText/ISerializer.cs
  2. 24 0
      PSDText/MyJsonSerializer.cs
  3. 24 0
      PSDText/MyXmlSerializer.cs
  4. 14 10
      PSDText/PSDText.cs

+ 9 - 0
PSDText/ISerializer.cs

@@ -0,0 +1,9 @@
+using System.IO;
+
+namespace PSDText
+{
+    public interface ISerializer
+    {
+        void Serialize(TextWriter textWriter, object o);
+    }
+}

+ 24 - 0
PSDText/MyJsonSerializer.cs

@@ -0,0 +1,24 @@
+using System;
+using System.IO;
+using Newtonsoft.Json;
+
+namespace PSDText
+{
+    public class MyJsonSerializer : ISerializer
+    {
+        private readonly JsonSerializer serializer;
+
+        public MyJsonSerializer(JsonSerializer jsonSerializer)
+        {
+            if (jsonSerializer == null)
+                throw new ArgumentNullException("jsonSerializer");
+
+            serializer = jsonSerializer;
+        }
+
+        public void Serialize(TextWriter textWriter, object o)
+        {
+            serializer.Serialize(textWriter, o);
+        }
+    }
+}

+ 24 - 0
PSDText/MyXmlSerializer.cs

@@ -0,0 +1,24 @@
+using System;
+using System.IO;
+using System.Xml.Serialization;
+
+namespace PSDText
+{
+    public class MyXmlSerializer : ISerializer
+    {
+        private readonly XmlSerializer serializer;
+
+        public MyXmlSerializer(XmlSerializer xmlSerializer)
+        {
+            if (xmlSerializer == null)
+                throw new ArgumentNullException("xmlSerializer");
+
+            serializer = xmlSerializer;
+        }
+
+        public void Serialize(TextWriter textWriter, object o)
+        {
+            serializer.Serialize(textWriter, o);
+        }
+    }
+}

+ 14 - 10
PSDText/PSDText.cs

@@ -99,17 +99,23 @@ namespace PSDText
                 throw new Exception("Nothing was read from XML!");
         }
 
+        private void Serialize(string path, ISerializer serializer)
+        {
+            using (var sr = new StreamWriter(path))
+            {
+                serializer.Serialize(sr, TextData);
+            }
+        }
+
         /// <summary>
         /// Serializes text layers as XML.
         /// </summary>
         /// <param name="path">Output XML path.</param>
         public void SaveAsXML(string path)
         {
-            var serializer = new XmlSerializer(typeof(List<TextData>));
-            using (var sr = new StreamWriter(path))
-            {
-                serializer.Serialize(sr, TextData);
-            }
+            var xmlSerializer = new XmlSerializer(typeof(List<TextData>));
+            var serializer = new MyXmlSerializer(xmlSerializer);
+            Serialize(path, serializer);
         }
 
         /// <summary>
@@ -118,11 +124,9 @@ namespace PSDText
         /// <param name="path">Output JSON path.</param>
         public void SaveAsJSON(string path)
         {
-            var serializer = new JsonSerializer();
-            using (var sr = new StreamWriter(path))
-            {
-                serializer.Serialize(sr, TextData);
-            }
+            var jsonSerializer = new JsonSerializer();
+            var serializer = new MyJsonSerializer(jsonSerializer);
+            Serialize(path, serializer);
         }
     }
 }