public override object ReadField(XmlReader xmlReader) { object list = GameDataAttribute.ReadTypeAttributes(xmlReader); while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { if (xmlReader.Name == "Item") { object listItem = GameDataAttribute.ReadTypeAttributes(xmlReader); if (listItem is GameObject <DoubleComponent> ) { GameObject <DoubleComponent> listGameObject = (GameObject <DoubleComponent>)listItem; listGameObject.LoadGameObjectData(xmlReader); MethodInfo addMethod = list.GetType().GetMethod("Add"); addMethod.Invoke(list, new object[] { listGameObject }); } else { throw new NotImplementedException("List of non-GameObjects not deserializable"); } } } else if (xmlReader.NodeType == XmlNodeType.EndElement) { break; } } return(list); }
public override object ReadField(XmlReader xmlReader) { //this bit may be broken..jd IVector <DoubleComponent> newVector2D = (IVector <DoubleComponent>)GameDataAttribute.ReadTypeAttributes(xmlReader); string xString = xmlReader.GetAttribute("x"); string yString = xmlReader.GetAttribute("y"); newVector2D.Set(Convert.ToDouble(xString), Convert.ToDouble(yString)); return(newVector2D); }
public virtual void LoadGameObjectData(XmlReader xmlReader) { while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { string AttributeNameForElement = xmlReader.Name; BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; System.Reflection.FieldInfo[] fieldsOfGameObject = this.GetType().GetFields(bindingFlags); foreach (FieldInfo fieldOfGameObject in fieldsOfGameObject) { object[] gameDataAttributes = fieldOfGameObject.GetCustomAttributes(typeof(GameDataAttribute), false); if (gameDataAttributes.Length > 0) { GameDataAttribute singleGameDataAttribute = (GameDataAttribute)gameDataAttributes[0]; string AttributeNameForField = singleGameDataAttribute.Name; if (AttributeNameForField == AttributeNameForElement) { if (fieldOfGameObject.FieldType.IsSubclassOf(typeof(GameObject <T>))) { GameObject <T> newGameObject = (GameObject <T>)GameDataAttribute.ReadTypeAttributes(xmlReader); newGameObject.LoadGameObjectData(xmlReader); fieldOfGameObject.SetValue(this, newGameObject); } else { object objectReadByAttribute = singleGameDataAttribute.ReadField(xmlReader); fieldOfGameObject.SetValue(this, objectReadByAttribute); } break; } } } } else if (xmlReader.NodeType == XmlNodeType.EndElement) { break; } } }