feat: creating deserializItem method. Making xml changes.

This commit is contained in:
Laura Gomez
2019-12-12 15:31:29 -05:00
committed by Chris Cameron
parent 1ab247f204
commit 7689ffc3c8
2 changed files with 40 additions and 2 deletions

View File

@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Added MathUtils methods for converting to and from percentages
- Added enum extensions for finding the inclusion and exclusion of enum flags
- Added DateTime extensions for adding years, months, days, hours, minutes and wrapping without modifying other values
- Added shims for deserializing an XML array using a callback for each item
## [10.2.0] - 2019-12-04
### Added

View File

@@ -128,6 +128,24 @@ namespace ICD.Common.Utils.Xml
return DeserializeArray(typeof(T), reader).Cast<T>();
}
/// <summary>
/// Deserializes the child elements as items in an array.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="reader"></param>
/// <param name="deserializeItem"></param>
/// <returns></returns>
public static IEnumerable<T> DeserializeArray<T>(IcdXmlReader reader, Func<IcdXmlReader, T> deserializeItem)
{
if (reader == null)
throw new ArgumentNullException("reader");
if (deserializeItem == null)
throw new ArgumentNullException("deserializeItem");
return DeserializeArray(typeof(T), reader, r => deserializeItem(r)).Cast<T>();
}
/// <summary>
/// Deserializes the child elements as items in an array.
/// </summary>
@@ -135,6 +153,26 @@ namespace ICD.Common.Utils.Xml
/// <param name="reader"></param>
/// <returns></returns>
public static IEnumerable<object> DeserializeArray(Type type, IcdXmlReader reader)
{
if (type == null)
throw new ArgumentNullException("type");
if (reader == null)
throw new ArgumentNullException("reader");
IXmlConverter converter = XmlConverterAttribute.GetConverterForType(type);
return DeserializeArray(type, reader, r => converter.ReadXml(r));
}
/// <summary>
/// Deserializes the child elements as items in an array.
/// </summary>
/// <param name="type"></param>
/// <param name="reader"></param>
/// <param name="deserializeItem"></param>
/// <returns></returns>
public static IEnumerable<object> DeserializeArray(Type type, IcdXmlReader reader, Func<IcdXmlReader, object> deserializeItem)
{
if (type == null)
throw new ArgumentNullException("type");
@@ -158,10 +196,9 @@ namespace ICD.Common.Utils.Xml
yield break;
// Read the items
IXmlConverter converter = XmlConverterAttribute.GetConverterForType(type);
while (reader.NodeType != XmlNodeType.EndElement)
{
yield return converter.ReadXml(reader);
yield return deserializeItem(reader);
reader.SkipInsignificantWhitespace();
}