public static void Serialize(BasicCondition _condition, ref XmlElement result) { if (result == null || _condition == null) { return; } if (result.Name != BasicCondition.xmlNodeName) { return; } Type cType = _condition.GetType(); result.SetAttribute("Type", cType.Name); FieldInfo[] variables = cType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); for (int vi = 0; vi < variables.Length; ++vi) { FieldInfo var = variables[vi]; if (!Attribute.IsDefined(var, typeof(DtVariable))) { continue; } object value = var.GetValue(_condition); string valueStr = ParseUtil.SerializeValue(value); DtVariable varAtr = (DtVariable)Attribute.GetCustomAttribute(var, typeof(DtVariable)); result.SetAttribute(varAtr.xmlAtrName, valueStr); } }
public static BasicCondition Deserialize(XmlElement _node) { if (_node == null) { return(null); } if (_node.Name != BasicCondition.xmlNodeName) { return(null); } string typeStr = _node.Attributes["Type"].Value; if (typeStr == null) { return(null); } // should use qualified assemble name for reflection if type is included in namespace: Type cType = Type.GetType(GetQualifiedTypeName(typeStr)); if (cType == null) { return(null); } // start parse: BasicCondition result = (BasicCondition)Activator.CreateInstance(cType); FieldInfo[] variables = cType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); for (int vi = 0; vi < variables.Length; ++vi) { FieldInfo var = variables[vi]; if (!Attribute.IsDefined(var, typeof(DtVariable))) { continue; } DtVariable varAtr = (DtVariable)Attribute.GetCustomAttribute(var, typeof(DtVariable)); XmlAttribute tempAttr = _node.Attributes[varAtr.xmlAtrName]; if (tempAttr == null) { continue; } string valueStr = tempAttr.Value; if (valueStr == null) { Debug.LogError("Can't find condition value " + varAtr.xmlAtrName + "in condition node."); continue; } Type _fType = var.FieldType; object value = ParseUtil.ParseValue(_fType, valueStr); if (value == null) { Debug.LogError("Can't parse condition value " + varAtr.xmlAtrName + "in condition node."); continue; } var.SetValue(result, value); } return(result); }