diff --git a/ICD.Common.Utils/Extensions/JsonExtensions.cs b/ICD.Common.Utils/Extensions/JsonExtensions.cs
index ed5338c..be15396 100644
--- a/ICD.Common.Utils/Extensions/JsonExtensions.cs
+++ b/ICD.Common.Utils/Extensions/JsonExtensions.cs
@@ -58,6 +58,21 @@ namespace ICD.Common.Utils.Extensions
extends.WriteValue(name);
}
+ ///
+ /// Gets the current value as a Type.
+ ///
+ ///
+ ///
+ [PublicAPI]
+ public static Type GetValueAsType(this JsonReader extends)
+ {
+ if (extends == null)
+ throw new ArgumentNullException("extends");
+
+ string value = extends.GetValueAsString();
+ return Type.GetType(value, false, true);
+ }
+
///
/// Gets the current value as an integer.
///
@@ -146,10 +161,36 @@ namespace ICD.Common.Utils.Extensions
if (items == null)
throw new ArgumentNullException("items");
+ extends.SerializeArray(writer, items, (s, w, item) => s.Serialize(w, item));
+ }
+
+ ///
+ /// Serializes the given sequence of items to the writer.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static void SerializeArray(this JsonSerializer extends, JsonWriter writer, IEnumerable items,
+ Action write)
+ {
+ if (extends == null)
+ throw new ArgumentNullException("extends");
+
+ if (writer == null)
+ throw new ArgumentNullException("writer");
+
+ if (items == null)
+ throw new ArgumentNullException("items");
+
+ if (write == null)
+ throw new ArgumentNullException("write");
+
writer.WriteStartArray();
{
foreach (TItem item in items)
- extends.Serialize(writer, item);
+ write(extends, writer, item);
}
writer.WriteEndArray();
}
@@ -168,6 +209,28 @@ namespace ICD.Common.Utils.Extensions
if (reader == null)
throw new ArgumentNullException("reader");
+ return extends.DeserializeArray(reader, (s, r) => extends.Deserialize(reader));
+ }
+
+ ///
+ /// Deserializes an array of items from the reader's current value.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static IEnumerable DeserializeArray(this JsonSerializer extends, JsonReader reader,
+ Func read)
+ {
+ if (extends == null)
+ throw new ArgumentNullException("extends");
+
+ if (reader == null)
+ throw new ArgumentNullException("reader");
+
+ if (read == null)
+ throw new ArgumentNullException("read");
+
if (reader.TokenType == JsonToken.Null)
yield break;
@@ -179,7 +242,7 @@ namespace ICD.Common.Utils.Extensions
while (reader.TokenType != JsonToken.EndArray)
{
- TItem output = extends.Deserialize(reader);
+ TItem output = read(extends, reader);
yield return output;
// Read out of the last value