public override object Deserialize(XMLReader input) { var backingArr = new List <object>(); int depth = input.Depth; input.GoToNextTag(); XMLTypeHandler handler = XMLHelpers.GetDerivedTypeHandlerFromXMLTag(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.GetDerivedTypeHandlerFromXMLTag(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 XMLDictionaryTypeHandler(Type type, XMLTypeHandler elementTypeHandler) : base(type, elementTypeHandler.Type, elementTypeHandler) { // Make a dictionary type with the arguments of the Key/Value generic element type. Type genericTypeDef = Type.GetGenericTypeDefinition(); _dictGenericType = genericTypeDef.MakeGenericType(elementTypeHandler.Type.GetGenericArguments()); }
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.GetDerivedTypeHandlerFromXMLTag(input, out string tag) ?? _elementTypeHandler; while (input.Depth >= depth && !input.Finished) { object newObj = tag[^ 1] == '/' ? null : handler.Deserialize(input);
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.GetDerivedTypeHandlerFromXMLTag(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(); } }
public XMLArrayTypeHandler(Type type, Type elementType) : base(type) { _elementTypeHandler = XMLHelpers.GetTypeHandler(elementType); _elementType = elementType; // non-opaque }
public XMLArrayTypeHandler(Type type, Type nonOpaqueElementType, XMLTypeHandler elementTypeHandler) : base(type) { _elementTypeHandler = elementTypeHandler; _elementType = nonOpaqueElementType; }
/// <inheritdoc /> public XMLListHandler(Type type, Type nonOpaqueElementType, XMLTypeHandler elementTypeHandler) : base(type, nonOpaqueElementType, elementTypeHandler) { }