mirror of
https://github.com/ICDSystems/ICD.Common.Utils.git
synced 2026-02-16 05:05:05 +00:00
Extension methods for further controlling JSON array serialization/deserialization
This commit is contained in:
@@ -58,6 +58,21 @@ namespace ICD.Common.Utils.Extensions
|
|||||||
extends.WriteValue(name);
|
extends.WriteValue(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the current value as a Type.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="extends"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[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);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the current value as an integer.
|
/// Gets the current value as an integer.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -146,10 +161,36 @@ namespace ICD.Common.Utils.Extensions
|
|||||||
if (items == null)
|
if (items == null)
|
||||||
throw new ArgumentNullException("items");
|
throw new ArgumentNullException("items");
|
||||||
|
|
||||||
|
extends.SerializeArray(writer, items, (s, w, item) => s.Serialize(w, item));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Serializes the given sequence of items to the writer.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TItem"></typeparam>
|
||||||
|
/// <param name="extends"></param>
|
||||||
|
/// <param name="writer"></param>
|
||||||
|
/// <param name="items"></param>
|
||||||
|
/// <param name="write"></param>
|
||||||
|
public static void SerializeArray<TItem>(this JsonSerializer extends, JsonWriter writer, IEnumerable<TItem> items,
|
||||||
|
Action<JsonSerializer, JsonWriter, TItem> 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();
|
writer.WriteStartArray();
|
||||||
{
|
{
|
||||||
foreach (TItem item in items)
|
foreach (TItem item in items)
|
||||||
extends.Serialize(writer, item);
|
write(extends, writer, item);
|
||||||
}
|
}
|
||||||
writer.WriteEndArray();
|
writer.WriteEndArray();
|
||||||
}
|
}
|
||||||
@@ -168,6 +209,28 @@ namespace ICD.Common.Utils.Extensions
|
|||||||
if (reader == null)
|
if (reader == null)
|
||||||
throw new ArgumentNullException("reader");
|
throw new ArgumentNullException("reader");
|
||||||
|
|
||||||
|
return extends.DeserializeArray(reader, (s, r) => extends.Deserialize<TItem>(reader));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserializes an array of items from the reader's current value.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TItem"></typeparam>
|
||||||
|
/// <param name="extends"></param>
|
||||||
|
/// <param name="reader"></param>
|
||||||
|
/// <param name="read"></param>
|
||||||
|
public static IEnumerable<TItem> DeserializeArray<TItem>(this JsonSerializer extends, JsonReader reader,
|
||||||
|
Func<JsonSerializer, JsonReader, TItem> 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)
|
if (reader.TokenType == JsonToken.Null)
|
||||||
yield break;
|
yield break;
|
||||||
|
|
||||||
@@ -179,7 +242,7 @@ namespace ICD.Common.Utils.Extensions
|
|||||||
|
|
||||||
while (reader.TokenType != JsonToken.EndArray)
|
while (reader.TokenType != JsonToken.EndArray)
|
||||||
{
|
{
|
||||||
TItem output = extends.Deserialize<TItem>(reader);
|
TItem output = read(extends, reader);
|
||||||
yield return output;
|
yield return output;
|
||||||
|
|
||||||
// Read out of the last value
|
// Read out of the last value
|
||||||
|
|||||||
Reference in New Issue
Block a user