/// <inheritdoc /> public override object Deserialize(XMLReader input) { var backingArr = new List <object>(); int depth = input.Depth; input.GoToNextTag(); XMLTypeHandler handler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out string tag) ?? _elementTypeHandler; while (input.Depth >= depth && !input.Finished) { object newObj = tag.Contains("/") ? null : handler.Deserialize(input); backingArr.Add(newObj); input.GoToNextTag(); handler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out tag) ?? _elementTypeHandler; } Type listGenericType = XMLHelpers.ListType.MakeGenericType(_elementType); var list = (IList)Activator.CreateInstance(listGenericType, backingArr.Count); for (var i = 0; i < backingArr.Count; i++) { list.Add(backingArr[i]); } return(list); }
public override object Deserialize(XMLReader input) { int depth = input.Depth; object newObj = Activator.CreateInstance(Type, true); input.GoToNextTag(); while (input.Depth >= depth && !input.Finished) { XMLTypeHandler inheritedHandler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out string currentTag); var nullValue = false; if (currentTag[^ 1] == '/')
public override object Deserialize(XMLReader input) { var backingList = new List <object>(); int depth = input.Depth; input.GoToNextTag(); XMLTypeHandler handler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out string tag) ?? _elementTypeHandler; while (input.Depth >= depth && !input.Finished) { object newObj = tag[^ 1] == '/' ? null : handler.Deserialize(input);
/// <summary> /// Deserialize a key and value objects. These are like any other objects except the two properties are "Key" and "Value" /// and the reflection handlers are for the specific key/value generic tuple pair. /// </summary> /// <param name="input"></param> /// <param name="key"></param> /// <param name="value"></param> public void DeserializeKeyValue(XMLReader input, out object key, out object value) { key = _keyDefault; value = _valueDefault; int depth = input.Depth; input.GoToNextTag(); while (input.Depth >= depth && !input.Finished) { XMLTypeHandler handler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out string currentTag); switch (currentTag) { case "Key": if (handler == null) { handler = _keyHandler.Value.TypeHandler; } key = handler.Deserialize(input); break; case "Value": if (handler == null) { handler = _valueHandler.Value.TypeHandler; } value = handler.Deserialize(input); break; default: Engine.Log.Warning($"Unknown deserialization tag in KVP - {currentTag}.", MessageSource.XML); return; } input.GoToNextTag(); } }