Fixing bug where array/dictionary deserialization was never terminating

This commit is contained in:
Chris Cameron
2018-02-17 12:44:10 -05:00
parent b62b5661e5
commit 41d0a43eff
2 changed files with 99 additions and 1 deletions

View File

@@ -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<int>(reader).ToArray();
}
}
Assert.IsTrue(deserialized.SequenceEqual(new int[] {1, 2, 3, 4}));
}
[Test]
public void SerializeDictionaryTest()
{
Dictionary<int, string> dict = new Dictionary<int, string>
{
{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<int, string> deserialized;
using (StringReader stringReader = new StringReader(json))
{
using (JsonReader reader = new JsonTextReader(stringReader))
{
reader.Read();
deserialized = serializer.DeserializeDictionary<int, string>(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]);
}
}
}

View File

@@ -181,6 +181,9 @@ namespace ICD.Common.Utils.Extensions
{
TItem output = extends.Deserialize<TItem>(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<TValue>(reader);
yield return new KeyValuePair<TKey, TValue>(key, value);
// Read out of the last value
reader.Read();
}
}
}