diff --git a/ICD.Common.Utils.Tests/Extensions/JsonExtensionsTest.cs b/ICD.Common.Utils.Tests/Extensions/JsonExtensionsTest.cs index 7327c7f..b759053 100644 --- a/ICD.Common.Utils.Tests/Extensions/JsonExtensionsTest.cs +++ b/ICD.Common.Utils.Tests/Extensions/JsonExtensionsTest.cs @@ -1,4 +1,10 @@ -using NUnit.Framework; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using ICD.Common.Utils.Extensions; +using Newtonsoft.Json; +using NUnit.Framework; namespace ICD.Common.Utils.Tests.Extensions { @@ -34,5 +40,91 @@ namespace ICD.Common.Utils.Tests.Extensions { Assert.Inconclusive(); } + + [Test] + public void SerializeArrayTest() + { + JsonSerializer serializer = new JsonSerializer(); + StringBuilder stringBuilder = new StringBuilder(); + + using (StringWriter stringWriter = new StringWriter(stringBuilder)) + { + using (JsonWriter writer = new JsonTextWriter(stringWriter)) + { + serializer.SerializeArray(writer, new int[] {1, 2, 3, 4}); + } + } + + string json = stringBuilder.ToString(); + Assert.AreEqual("[1,2,3,4]", json); + } + + [Test] + public void DeserializeArrayTest() + { + const string json = "[1,2,3,4]"; + + JsonSerializer serializer = new JsonSerializer(); + int[] deserialized; + + using (StringReader stringReader = new StringReader(json)) + { + using (JsonReader reader = new JsonTextReader(stringReader)) + { + reader.Read(); + deserialized = serializer.DeserializeArray(reader).ToArray(); + } + } + + Assert.IsTrue(deserialized.SequenceEqual(new int[] {1, 2, 3, 4})); + } + + [Test] + public void SerializeDictionaryTest() + { + Dictionary dict = new Dictionary + { + {1, "Item 1"}, + {10, "Item 2"}, + {15, "Item 3"} + }; + + JsonSerializer serializer = new JsonSerializer(); + StringBuilder stringBuilder = new StringBuilder(); + + using (StringWriter stringWriter = new StringWriter(stringBuilder)) + { + using (JsonWriter writer = new JsonTextWriter(stringWriter)) + { + serializer.SerializeDictionary(writer, dict); + } + } + + string json = stringBuilder.ToString(); + Assert.AreEqual("{\"1\":\"Item 1\",\"10\":\"Item 2\",\"15\":\"Item 3\"}", json); + } + + [Test] + public void DeserializeDictionaryTest() + { + const string json = "{\"1\":\"Item 1\",\"10\":\"Item 2\",\"15\":\"Item 3\"}"; + + JsonSerializer serializer = new JsonSerializer(); + Dictionary deserialized; + + using (StringReader stringReader = new StringReader(json)) + { + using (JsonReader reader = new JsonTextReader(stringReader)) + { + reader.Read(); + deserialized = serializer.DeserializeDictionary(reader).ToDictionary(); + } + } + + Assert.AreEqual(3, deserialized.Count); + Assert.AreEqual("Item 1", deserialized[1]); + Assert.AreEqual("Item 2", deserialized[10]); + Assert.AreEqual("Item 3", deserialized[15]); + } } } diff --git a/ICD.Common.Utils/Extensions/JsonExtensions.cs b/ICD.Common.Utils/Extensions/JsonExtensions.cs index 92da75c..ed5338c 100644 --- a/ICD.Common.Utils/Extensions/JsonExtensions.cs +++ b/ICD.Common.Utils/Extensions/JsonExtensions.cs @@ -181,6 +181,9 @@ namespace ICD.Common.Utils.Extensions { TItem output = extends.Deserialize(reader); yield return output; + + // Read out of the last value + reader.Read(); } } @@ -249,6 +252,9 @@ namespace ICD.Common.Utils.Extensions TValue value = extends.Deserialize(reader); yield return new KeyValuePair(key, value); + + // Read out of the last value + reader.Read(); } } }