コード例 #1
0
    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);
        }
    }
コード例 #2
0
    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);
    }