private Interactive CreateInteractiveByXmlNode(XmlNode interactive) { Type type = Type.GetType("PuzzleGame.Model." + interactive.Name + "," + Assembly.GetExecutingAssembly().FullName); Interactive obj = Activator.CreateInstance(type, true) as Interactive; //解析属性 foreach (XmlAttribute attribute in interactive.Attributes) { //含有-表示当前属性是列表 if (attribute.Name.Contains("-")) { //为null则创建 //Debug.Log(attribute.Name.Split('-')[0] + "---" + obj.GetType().Name); if (type.GetField("m_" + attribute.Name.Split('-')[0]).GetValue(obj) == null) { object list = Activator.CreateInstance(typeof(List <string>)); type.GetField("m_" + attribute.Name.Split('-')[0]).SetValue(obj, list); } //为列表添加值 (type.GetField("m_" + attribute.Name.Split('-')[0]).GetValue(obj) as List <string>).Add(attribute.Value); } else { type.GetField("m_" + attribute.Name).SetValue(obj, attribute.Value); type.GetField("m_" + "value").SetValue(obj, interactive.InnerText); } } obj.Initialized(); //对Jump的特殊解析 if (obj is Jump) { Jump jump = obj as Jump; if (Jump.m_JumpList.ContainsKey(jump.m_Id)) { throw new Exception("JumpId : " + jump.m_Id + "repeated"); } Jump.m_JumpList.Add(jump.m_Id, jump); } if (interactive.ChildNodes[0] == null) { return(obj); } //dfs解析value if (interactive.ChildNodes[0].ChildNodes.Count > 0) { obj = dfs(interactive, obj); } return(obj); }